nodejs开发指南中出现的问题以及解决汇总

问题一: node

安装 ejs 模板的语法有问题,安装不成功,以下: mongodb

express -t ejs microblog express

须要改为: npm

express  -e  ejs  microblog app

问题二: ide

partial 方法已经不能用了,能够用include代替,以下: post

<ul><%- partial('listitem', items) %></ul> ui

须要改为: spa

<% items.forEach(function(listitem){ %> code

<% 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){});

相关文章
相关标签/搜索