问题一: 安装 ejs 模板的语法有问题,安装不成功,如下: express -t ejs microblog
需要改成: express -e ejs microblog
问题二: partial 方法已经不能用了,可以用include代替,如下: <ul><%- partial(‘listitem’, items) %></ul>
需要改成: <% items.forEach(function(listitem){ %> <% include listitem %> <% }) %>
问题三: helpers 和 dynamicHelpers 方法已经不能用了,如下: app.helpers({ inspect: function(obj) { return util.inspect(obj, true); } }); app.dynamicHelpers({ headers: function(req, res) { return req.headers; } }); app.get(’/helper’, function(req, res) { res.render(‘helper’, { title: ‘Helpers’ }); });
需要改成: var util = require(‘util’); app.locals({ inspect: function(obj){ return util.inspect(obj, true); } }); app.use(function(req, res, next){ res.locals.headers = req.headers; next(); }); app.get(’/helper’, function(req, res){ res.render(‘helper’,{ title: ‘Helpers’ }); });
还需要注意的是,上面这段代码需要放在 app.use(app.router); 前面。
问题四: express3.*已经不支持layout方法了,所以要改成include才能正常显示首页。 在 views 文件夹下新建,header.ejs 和 footer.ejs。 layout.ejs 中的内容,以 <%- body %> 为界限,上面的内容写入header.ejs ,下面的内容写入footer.ejs 然后在 index.js 中加入 <% include header.ejs %> 和 <% include footer.ejs %>,把表单内容,写在中间即可
问题五: 配置mongodb时,很多报错: app.js中的 var settings = require(’…/settings’); 应改成 var settings = require(’./settings’); app.js中的 app.use(express.bodyParser()); 应该去掉 app.js中的 var MongoStore = require(‘connect-mongo’); 应改成 var MongoStore = require(‘connect-mongo’)(express);
问题六: 出现 has no method ‘router’ 问题,解决办法如下: 保留原来的 app.use(app.router); 不要按作者的说法改成 app.use(express.router(routes)); 并且在 app.js 最末尾加上 routes(app); 而且还要删除掉 app.js 中的 app.get(’/’, routes.index); app.get(’/u/:user’, routes.user); app.post(’/post’, routes.post); app.get(’/reg’, routes.reg); app.post(’/reg’, routes.doReg); app.get(‘login’, routes.login); app.post(‘login’, routes.doLogin); app.get(’/logout’, routes.logout);
问题七: req.flash 方法不能用,解决办法如下: 运行>npm install connect-flash 安装组件 并在app.js中加入: var flash = require(‘connect-flash’); app.use(flash());
问题八: Error: Cannot use a writeConcern without a provided callback at Db.ensureIndex (D:\Work\code\nodejs\microblog\node_modules\mongodb\lib\mongodb\db.js:1395:11) 解决办法如下: \models\user.js 中的 collection.ensureIndex(‘name’, {unique: true}); 改成collection.ensureIndex(‘name’, {unique: true}, function(err, user){}); \models\post.js 中的 collection.ensureIndex(‘user’); 改成collection.ensureIndex(‘user’ ,function(err, post){});
唉 新版本改的东西好多 ,相当于刚刚尝试hello world ,结果就GG了…
毕竟两年前的书了
嗯,不过一些东西改了还可以作为参考。
在express4.x版本中,执行node app.js无效,需要执行npm start
app.locals({ inspect: function(obj){ return util.inspect(obj, true); } }); 少了一个等于
app.locals = ({ inspect: function(obj){ return util.inspect(obj, true); } });