原文:http://www.unfish.net/archives/772-20131207.html

很幸运地找到这篇文章,里面的内容讲的非常的细,对于开始着手搭建项目的我来说特别有用。但文中的部分工具由于版本的原因,某些地方的用法已变更,自己在学习的时候,遇到的问题也要耗费时间去检查与研究,这里就将变动的部分记录下来,仅作为参考:(这里我的express版本为4.2.0,mongodb版本为2.6.4)
1、express命令
需要先安装express-generetor,命令如下:
npm install -g express-generator
2、第三步的创建项目的第一步

这里会提示没有-s命令方式,直接略过,使用
express nodetest1
3、安装mongodb和monk
文中是直接在package.json文件中添加,然后默认安装,本人在安装时出现长时间处于安装状态,所以直接Ctrl+C退出了,然后以下面方式重新来过。
npm cache clean
npm install mongodb -g
4、App的启动
老版本中启动app只要node app.js,但新的express版本中需要使用:
npm start
5、路由的设置
新的版本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);//新的写法

6、读取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;

7、向数据库写入数据

//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,一时像不太明白,希望有明白的指点一下迷津!

最新文章

  1. 关于Kendo的Grid 单元格样式
  2. Android之ScrollView嵌套ListView和GridView冲突
  3. 用struts2获取session、request、parmeter的方法
  4. eclipse 自动补全
  5. 利用数据库链做DML操作时报ORA-02069: global_names parameter must be set to TRUE for this operation
  6. innodb 页分配
  7. Java基础知识强化之IO流笔记17:FileOutputStream构造方法使用
  8. Week8(10月28日)
  9. os模块学习小随笔
  10. 换个角度审视NAT技术
  11. Linq Take和Skip详解
  12. deeplearning.ai 人工智能行业大师访谈 Pieter Abbeel 听课笔记
  13. 8.String StringBuffer StringBuilder
  14. 【嵌入式开发】嵌入式 开发环境 (远程登录 | 文件共享 | NFS TFTP 服务器 | 串口连接 | Win8.1 + RedHat Enterprise 6.3 + Vmware11)
  15. 判断无向图是否有环路的方法 -并查集 -BFS
  16. Android 视频通信,低延时解决方案
  17. Vim使用技巧:vimtutor
  18. kubernetes 安装kong、kong-ingress-controlor
  19. cdnbest区域里快速配置全部节点的缓存
  20. MySQL Json类型的数据处理

热门文章

  1. GCD - Extreme (II) for(i=1;i<N;i++) for(j=i+1;j<=N;j++) { G+=gcd(i,j); } 推导分析+欧拉函数
  2. 第一百九十四节,jQuery EasyUI,Droppable(放置)组件
  3. dm8148 开发之---互斥量、条件量、枷锁、互斥枷锁
  4. 001windows已遇到一个关键性问题 一分钟后自动重启
  5. 003android初级篇之【转】Android开发中颜色的定义方法
  6. Python2.6升级Python2.7
  7. 【BZOJ1803】Spoj1487 Query on a tree III 主席树+DFS序
  8. 【BZOJ1923】[Sdoi2010]外星千足虫 高斯消元
  9. SpringBoot自带热加载开发工具
  10. angularjs 遇见$scope,xxx=function()报错为该函数未定义