《node.js开发指南》中“微博系统”在express3.0+版本下的实现

《node.js开发指南》 出版于2012年,作者是一位2010级的清华学生,是当时国内第一本讲node.js的中文书。 这本书适合于Node.js的入门学者,但是由于年代关系,并且由于Node.js这几年的飞速发展,该书的例子用法在现在已经不适用。本文整理了该书中实现的“微博系统”在express3.0下实现过程中,博主所遇到的问题,以及搜集到的解决方法,分享给各位。

 

该博文写于2014年4月10日,用的Node的版本为0.10.5,express版本为3.2.4

Node版本:

express版本:

 
1 express3.0默认不支持layout模板
  即生成的ejs文件中没有layout.ejs, 故博主舍弃了layout的写法,创建文件header.ejsfooter.ejs,将layout的头部和尾部分别写入header.ejsfooter.ejs中,要使用时就在其他ejs文件中用<%- include header %>和<%- include footer %>引用得到。

 

2 在routes/index.js中添加module.exports = function(app)时,出现错误
     Error: .get() requires callback functions but got a [object Undefined]
解决方法:
     在app.js中删除以下代码:
  
  
  并改为
1   routes(app);

 

 
3 app.use(express.router(routes));  报错
  
  解决方法:
       在app.js中,找到:
1   app.use(express.router(routes));
     将之改为:
1     app.use(app.router);

 

 
 
3 Mongodb连接出错
  
  解决方法:
       在app.js中,将
1   MongoStore = require('connect-mongo'); 

 

 
    改为  
1   MongoStore = require('connect-mongo')(express);

 

 
 
5 点击注册后 显示 ReferenceError: crypto is not defined
  
  解决办法:
    在routes/index.js中, 文件头部加入
1    var crypto = require('crypto');
2   var User = require('../models/user.js');

 

 
6 不存在dynamicHelpers 的方法
  
  解决方法:
    在app.js中将dynamicHelpers部分的代码: 
1   app.dynamicHelpers({
2     /* .......*/
3   });

 

    替换为:
1   app.use(function(req, res, next){
2      var error = req.flash('error');
3     var success = req.flash('success');
4     res.locals.user = req.session.user;
5     res.locals.error = error.length ? error: null;
6     res.locals.success = success.length ? success: null;
7     next();
8   });

 

 

7  不存在flash方法
  解决方案:
       在新版express中去除了flash, 我们可以使用connect-flash代替之。
    在cmd中进入项目文件夹,安装connect-flash, npm install connect-flash
    并在app.js中添加以下代码 
1   var flash = require('connect-flash');
2   app.use(flash());
     注意: 要在flash的使用处之前添加。
 
 
8  partial方式无法使用
  网上找到的方法是:
    在cmd中进入目录,安装partials,
1     npm install express-partials    
  在app.js中添加以下代码
1   var partials = require('express-partials');
2   app.use(partials());

  可是博主这里出现posts的值没有传入的问题。于是博主抛弃了partial的用法,改为include用法。

  也就是将users.ejs改为:

1     <% if (user) { %>
2         <%- include say %>
3     <% } %>
4         <%- include post %>

 

posted @ 2014-04-10 20:52  一唏  阅读(1199)  评论(1编辑  收藏  举报