原文:
http://www.unfish.net/archives/772-20131207.html
很幸運地找到這篇文章,裏面的內容講的很是的細,對於開始着手搭建項目的我來講特別有用。但文中的部分工具因爲版本的緣由,某些地方的用法已變動,本身在學習的時候,遇到的問題也要耗費時間去檢查與研究,這裏就將變更的部分記錄下來,僅做爲參考:(這裏個人express版本爲4.2.0,mongodb版本爲2.6.4)
一、express命令
須要先安裝
express-generetor,命令以下:
npm install -g express-generator
二、第三步的建立項目的第一步
這裏會提示沒有-s命令方式,直接略過,使用
express nodetest1
三、安裝mongodb和monk
文中是直接在package.json文件中添加,而後默認安裝,本人在安裝時出現長時間處於安裝狀態,因此直接Ctrl+C退出了,而後如下面方式從新來過。
npm cache clean
npm install mongodb -g
四、App的啓動
老版本中啓動app只要
node app
.
js,
但新的express版本中須要使用:
npm start
五、路由的設置
新的版本app.js中路由的設置不是使用app.get(),而是app.use()。如:
app.use('/', routes);
app.use('/users', users);
而且這裏還有另一個問題:
在老的版本中如果請求頁面中的小模塊,路由規則中直接用'.'的方式,如userlist.newuser,可是在新版本中不支持這種寫法,只需寫到文件名便可。
app.get('/userlist/newuser', userlist.newuser);//老版本
app.use('/userlist/newuser', userlist);//新的寫法
六、讀取mongodb中的數據並顯示出來
//app.js
app.get('userlist',routes.userlist(db));
//userlist.js
exports.userlist=function(db){
return function(req, res){
var collection = db.get('usercollection');
collection.find({},{},function(e,docs){
res.render('userlist', {
"userlist" : docs
});
});
}
}
新版本下就須要改動以下:
//app.js
app.use('/userlist/newuser', userlist);
//userlist.js
var mongo = require('mongodb');
var monk = require('monk');
var db = monk('localhost:27017/nodetest1');
router.get('/', function(req,res) {
var collection = db.get('usercollection');
collection.find({},{},function(e,docs){
res.render('userlist', {
"userlist" : docs
});
});
});
module.exports = router;
七、向數據庫寫入數據
//app.js
app.post('/adduser', routes.adduser(db));
//userlist.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");
}
});
}
}
//app.js
app.use('/userlist/newuser', userlist);
//userlist.js
router.post('/newuser',function(req, res){
var userName = req.body.username;
var userEmail = req.body.useremail;
var collection = db.get('usercollection');
collection.insert({
"username" : userName,
"email" : userEmail
}, function (err, doc) {
if (err) {
res.send("很抱歉,添加數據失敗!");
}
else {
//res.location("userlist");
res.redirect("back");
res.send("恭喜您,數據添加成功!");
console.log(doc);
}
});
});
module.exports = router;
注:最後一個問題的地方,本來的重定向不起做用。
上圖是newuser.jade的內容,其中的action部分若只寫「/newuser」沒法添加數據,加上「/userlist」後才能正常添加數據到數據庫中,但這同時就無能正確重定向了,重定向後地址欄出現的是localhost:3000/userlist/userlist,一時像不太明白,但願有明白的指點一下迷津!