STEP 1 – INSTALL NODE.JS
下載 Node.js website ,假設安裝在c:\node
STEP 2 – INSTALL EXPRESS
C:\node>npm install -g express
在NodeJs命令行輸入上述命令
STEP 3 – 創建一個EXPRESS PROJECT
使用Jade作爲模板,輸入:
C:\node>express --sessions nodetest1
輸出:
C:\node>express --sessions nodetest1
create : nodetest1
create : nodetest1/package.json
create : nodetest1/app.js
create : nodetest1/routes
create : nodetest1/routes/index.js
create : nodetest1/routes/user.js
create : nodetest1/views
create : nodetest1/views/layout.jade
create : nodetest1/views/index.jade
create : nodetest1/public/images
create : nodetest1/public/javascripts
create : nodetest1/public
create : nodetest1/public/stylesheets
create : nodetest1/public/stylesheets/style.css
install dependencies:
$ cd nodetest1 && npm install
run the app:
$ node app
STEP 4 – 編輯 依賴
express已經在nodetest1 創建一個文件package.json,打開編輯:
{
"name": "application-name",
"version": "0.0.1",
"private": true,
"scripts": {
"start": "node app.js"
},
"dependencies": {
"express": "3.4.4",
"jade": "*"
}
}
改變依賴,加入MongoDB 和 Monk.調用:
"dependencies": {
"express": "3.4.4",
"jade": "*",
"mongodb": "*",
"monk": "*"
}
STEP 5 – 安裝依賴
C:\node\nodetest1>npm install
現在你已經有了完整的準備,切換到nodetest1 輸入:
C:\node\nodetest1>node app.js
輸出:
Express server listening on port 3000
界面如下:
實現Hello World
使用 Sublime Text來編輯代碼。
在nodetest1 打開 app.js. 加入如下:
var express = require('express');
var routes = require('./routes');
var user = require('./routes/user');
var http = require('http');
var path = require('path');
這就產生了一堆基本的JavaScript變量,並將其綁到某些包,依賴關係,節點功能和路由。路由是有點像的模型和控制器在此設置的組合 - 他們指揮交通,也??包含一些編程邏輯。
開始編程,輸入:
var app = express();這其中很重要的。它實例化Express,並分配我們的應用程序變量給它。下一節將使用這個變量來配置一堆的東西。
// all environments
app.set('port', process.env.PORT || 3000);
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'jade');
app.use(express.favicon());
app.use(express.logger('dev'));
app.use(express.bodyParser());
app.use(express.methodOverride());
app.use(app.router);
app.use(express.static(path.join(__dirname, 'public')));
這是告訴express哪裏發現視圖view,什麼引擎用來渲染這些視圖(jade),然後調用這些方法。
最後一行是告訴express服務靜態對象:/public/ dir,但使他們實際上看起來他們是從頂層到來。例如,圖像目錄爲c:\node\nodetest1\public\image,訪問是http://localhost:3000/images
你需要改變:
app.use(express.bodyParser());
到:
app.use(express.urlencoded());
這是爲了避免你的節點控制檯出現一些警告/。
下面是做一些錯誤檢查:
// development only
if ('development' == app.get('env')) {
app.use(express.errorHandler());
}
下面是告訴路由使用哪個URI:
app.get('/', routes.index);
app.get('/users', user.list);
代碼科技user變量映射到/routes/user.js?
下面是創建啓動服務器:
http.createServer(app).listen(app.get('port'), function(){
console.log('Express server listening on port ' + app.get('port'));
});
下面我們開始顯示Hello, World!,在app.js尾端加入:
app.get('/helloworld', routes.helloworld);
如果你這時重啓服務器,瀏覽訪問http://localhost:3000/helloworld 會出錯,因爲我們沒有配置路由對應的頁面。
我們打開C:\NODE\NODETEST1\ROUTES\INDEX.JS,如下:
/*
* GET home page.
*/
exports.index = function(req, res){
res.render('index', { title: 'Express' });
};
我們要在/views下創建helloworld ,在該文件尾端加入:
exports.helloworld = function(req, res){
res.render('helloworld', { title: 'Hello, World!' });
};
當然我們不必要編輯具體helloworld頁面,因爲jade模板爲我們實現,打開views 目錄,打開index.jade. 文件,另存成:helloworld.jade
編輯C:\NODE\NODETEST1\VIEWS\HELLOWORLD.JADE
extends layout
block content
h1= title
p Welcome to #{title}
使用 ("extends") 繼承Jade的模板layout,定義了一個content 塊:title是我們在index.js路由中定義的,改變爲下面一行:
p Hello, World! Welcome to #{title}保存後重啓啓動node.js,用ctrl-c中斷,再輸入
node app.js
輸入http://localhost:3000/helloworld 輸出 :
創建從數據庫讀取功能
STEP 1 – 安裝 MONGODB
STEP 2 – 運行 MONGOD 和 MONGO
在nodetest1 創建一個data目錄,進入mongoDB安裝目錄假設 C:\mongodb,執行:
mongod --dbpath c:\node\nodetest1\data
Mongo 已經啓動。
再次在該目錄執行:
mongo
輸出:
c:\mongo>mongo
MongoDB shell version: 2.4.5
connecting to: test
你會看到它提到已經建立一個連接。好吧,你已經得到了MongoDB的啓動和運行,你已經連接到它的客戶端。我們將使用這個客戶端手動操作數據庫,
STEP 3 – 創建 A DATABASE
在mongoDB控制檯輸入:
use nodetest1這樣我們創建了nodetest1,
STEP 4 – 加入數據
MongoDB是使用JSON,我們這是一個用戶名和電子郵件地址的簡單的數據庫,數據看來如下:
{
"_id" : 1234,
"username" : "cwbuecheler",
"email" : "[email protected]"
}
在控制檯輸入:
db.usercollection.insert({ "username" : "testuser1", "email" : "[email protected]" })
認爲“db”代表我們的數據庫,其中如上文所述,我們已經定義爲“nodetest1”。
下面輸入:
db.usercollection.find().pretty()
“usercollection”部分是我們的集合。請注意,這裏我們沒有創建了“usercollection”集合。因爲我們第一次添加它時,它會被自動創建。上面命令返回:
{
"_id" : ObjectId("5202b481d2184d390cbf6eca"),
"username" : "testuser1",
"email" : "[email protected]"
}
ObjectId是MongoDB自動產生的。現在我們有了一個記錄,可以增加更多:
newstuff = [{ "username" : "testuser2", "email" : "[email protected]" }, { "username" : "testuser3", "email" : "[email protected]" }]
db.usercollection.insert(newstuff);
輸出結果:
{
"_id" : ObjectId("5202b481d2184d390cbf6eca"),
"username" : "testuser1",
"email" : "[email protected]"
}
{
"_id" : ObjectId("5202b49ad2184d390cbf6ecb"),
"username" : "testuser2",
"email" : "[email protected]"
}
{
"_id" : ObjectId("5202b49ad2184d390cbf6ecc"),
"username" : "testuser3",
"email" : "[email protected]"
}
STEP 5 – HOOK MONGO連接到 NODE
我們將輸出如下結果:
<ul>
<li><a href="mailto:[email protected]">testuser1</a></li>
<li><a href="mailto:[email protected]">testuser2</a></li>
<li><a href="mailto:[email protected]">testuser3</a></li>
</ul>
打開C:\node\nodetest1\app.js 頭部如下:
var express = require('express');
var routes = require('./routes');
var user = require('./routes/user');
var http = require('http');
var path = require('path');
加入三行:
// New Code
var mongo = require('mongodb');
var monk = require('monk');
var db = monk('localhost:27017/nodetest1');
使用Monk 實現nodejs和mongo交互。mongoDB在localhost:27017/nodetest1,是我們之前創建的數據庫。
再加入下面幾行:
app.get('/', routes.index);
app.get('/users', user.list);
app.get('/helloworld', routes.helloworld);
最後加入下面一行:
app.get('/userlist', routes.userlist(db));
當用戶瀏覽/userlist,我們將我們的數據庫對象db傳入userlist 路由,但是我們還沒有userlist 路由,下面我們來創建:
STEP 6 – 從MONGO拉出數據顯示
打開C:\node\nodetest1\routes\index.js ,加入:
exports.userlist = function(db) {
return function(req, res) {
var collection = db.get('usercollection');
collection.find({},{},function(e,docs){
res.render('userlist', {
"userlist" : docs
});
});
};
};
這是越來越相當複雜不過,這是一個包裝函數,參數是數據庫變量db,然後做一個頁面呈現,我們要使用('usercollection')做一個查詢,然後返回變量“文檔”結果,再做一個渲染的userlist(需要Jade模板)。
設置Jade模板,進入C:\node\nodetest1\views\ ,打開index.jade.轉存爲userlist.jade,打開編輯:
extends layout
block content
h1.
User List
ul
each user, i in userlist
li
a(href="mailto:#{user.email}")= user.username
這是顯示我們一開始需要的輸出列表結果。
重啓nodejs,瀏覽器進入 http://localhost:3000/userlist,輸出:
寫入數據庫
寫入數據庫並不是特別困難。從本質上講,我們需要設置一個路由,需要一個POST,而不是GET。
STEP 1 – 創建數據輸入
打開app.js,找到 app.get();
app.get('/newuser', routes.newuser);
在其後面加入:
app.get('/', routes.index);
app.get('/users', user.list);
app.get('/helloworld', routes.helloworld);
app.get('/userlist', routes.userlist(db));
// New Code
app.get('/newuser', routes.newuser);
打開 /routes/index.js增加路由
exports.newuser = function(req, res){
res.render('newuser', { title: 'Add New User' });
};
設置頁面,通過jade模板,打開 /views/index.jade,,另存爲newuser.jade,用下面內容完全替代:
extends layout
block content
h1= title
form#formAddUser(name="adduser",method="post",action="/adduser")
input#inputUserName(type="text", placeholder="username", name="username")
input#inputUserEmail(type="text", placeholder="useremail", name="useremail")
button#btnSubmit(type="submit") submit
瀏覽器瀏覽http://localhost:3000/newuser
STEP 2 – 創建 DB功能
打開app.js,再次找到app.get,在後面加入:
app.get('/', routes.index);
app.get('/users', user.list);
app.get('/helloworld', routes.helloworld);
app.get('/userlist', routes.userlist(db));
app.get('/newuser', routes.newuser);
加入:
app.post('/adduser', routes.adduser(db));
打開/routes/index.js,加入:
exports.adduser = function(db) {
return function(req, res) {
// Get our form values. These rely on the "name" attributes
var userName = req.body.username;
var userEmail = req.body.useremail;
// Set our collection
var collection = db.get('usercollection');
// Submit to the DB
collection.insert({
"username" : userName,
"email" : userEmail
}, function (err, doc) {
if (err) {
// If it failed, return error
res.send("There was a problem adding the information to the database.");
}
else {
// If it worked, set the header so the address bar doesn't still say /adduser
res.location("userlist");
// And forward to success page
res.redirect("userlist");
}
});
}
}
在成功添加到數據庫中,我們的用戶轉發回的userlist頁面,在那裏他們將看到他們的新添加的用戶。
STEP 4 – 連接數據庫增加數據
重新啓動nodejs,瀏覽http://localhost:3000/newuser 輸入數據
得到頁面:
大功告成。
完整源碼在github