CNode

调用req.flash('error', '用户已存在!'); 时候 报错 "req.flash is not a function"

问答
Xxlzytf发布于10 年前最后回复9 年前7 回复6669 浏览0 收藏
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)

X
xlzytf#2·10 年前

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

X
xlzytf#3·10 年前

我发现在 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中调用的话 就会报错 想不通 求解。。。 谢谢大神们

X
xlzytf#4·10 年前

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

X
xlzytf#5·10 年前

我找到原因了 在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的 - -! 真艰辛 希望能对下一个人有帮助

H
HustLion#6·10 年前

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

M
marvincreat#7·9 年前

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

参与回复
登录后即可参与回复。登录