node开发指南中的microblog项目中遇到的问题总结及解决方法

 

1      使用connect-mongdo时,报错:Cannot read property 'Store' of undefined

解决: require('connect-mongo')的时候加一个参数express,如下:

  var express = require('express');

  var MongoStore = require('connect-mongo')(express),

2      使用app.use(express.router(routers)) 提示 has no method 'router'

解决:原因可能是express 3.0后没有了router这个方法,继续使用之前的app.use(app.router),在app.js末尾加入:

  routers(app);

(这样routes/inndex.js 可以继续使用书中的书写格式.)

3         express3.x不支持layout布局视图

解决方法:

安装express-partials组件

var partials = require('express-partials');

app.use(partials());

4  helpers 和 dynamicHelpers 方法已经不能用了,如下:

app.helpers({

     inspect: function(obj) {

          return util.inspect(obj, true);

     }

});

app.dynamicHelpers({

     headers: function(req, res) {

          return req.headers;

     }

});

解决方法:app.use(function(req,res,next){

  res.locals.user = req.session.user;

  var err = req.flash('error');

  var succ = req.flash('success');

  console.log(err);

  res.locals.error = err.length ? err : null;

  res.locals.success = succ.length ? succ : null;

   next();

});

注意:这个一定要放置在app.use(app.router);前面

5 req.flash 方法不能用,解决办法如下:

运行>npm install connect-flash 安装组件

并在app.js中加入:

var flash = require('connect-flash');

app.use(flash());

6注意req.flash()方法设置的值,只能获取一次。

比如: req.flash(‘error’,’aaabbb’);

Req.flash(‘error’)

在次获取req.flash(‘error’)会得到空值

所以模版渲染的时候就得不到数据。正确做法应该先用一个过渡变量拷贝一份

  res.locals.success=req.flash('success').length?req.flash('success'):null;

    next();

});

原文地址:https://www.cnblogs.com/submerge/p/3840296.html