调用req.flash('error', '用户已存在!'); 时候 报错 "req.flash is not a function"
发布于 8 年前 作者 xlzytf 6178 次浏览 来自 问答
var session = require('express-session');
var MongoStore = require('connect-mongo')(session);
app.use(session({
  secret: settings.cookieSecret,
  key: settings.db,//cookie name
  cookie: { maxAge: 1000 * 60 * 60 * 24 * 30 },//30 days
  store: new MongoStore({
    url: 'mongodb://localhost/blogdb'
  }),
  resave: true, 
  saveUninitialized: true
}));

var flash = require('connect-flash');
app.use(flash());

我已经在app.js里面用use flash connect-flash 这个我也安装了

    • 这个报错莫名其妙的 求拯救
7 回复

https://github.com/nswbmw/N-blog/wiki/第1章–一个简单的博客

我是参照这个教程学习的 express 是4.x的版本

console.log(req.session + ’ ’ + req.flash); 结果是undefinedundefined 这样是不是表示我use的时候出错了。。。

我发现在 app.js 中 调用req.flash 不会报错 app.use(function (req, res, next) {

req.flash(‘error’, ‘用户已存在!’);

var err = new Error(‘Not Found’); err.status = 404; next(err); });

但是在路由 index.js中调用的话 就会报错 想不通 求解。。。 谢谢大神们

我检查了req的属性 在app.js中回调时 它有session的属性 但是在index.js中回调的时候 并没有这个属性 输出是undefined

我找到原因了 在app.js 中调用app.use 的顺序有关 app.use(session({ secret: settings.cookieSecret, key: settings.db,//cookie name cookie: { maxAge: 1000 * 60 * 60 * 24 * 30 },//30 days store: new MongoStore({ url: ‘mongodb://localhost/blogdb’ }), resave: true, saveUninitialized: true }));

app.use(flash());

app.use(’/’, routes);

app.use(’/users’, users);

// catch 404 and forward to error handler app.use(function (req, res, next) {

req.flash(‘error’, ‘用户已存在!’);

var err = new Error(‘Not Found’); err.status = 404; next(err); }); 那个session的中间件 要比路由的早use 这样路由中的回调才会有session这个属性 req.flash 本身是基于session的 - -! 真艰辛 希望能对下一个人有帮助

感谢,正是这样解决了问题

感谢,同样的问题,把app.use(flash());提上去就成功了,真是前人栽树,后人乘凉。

回到顶部