CNode

experss3中req.flash无法保存进res.locals里的解决办法

Bbaiezone发布于14 年前最后回复13 年前12 回复11081 浏览0 收藏

在app.js里用

app.use(function (req, res, next) { res.locals.error= req.flash('error').length ? req.flash('error') : null; next(); });

前端(如template.ejs)文件调用时用

<% if(locals.error) { %>

不会输出任何东西

原因是req.flash('error')执行一次就会消失。 所以在执行过req.flash('error').length这句话后req.flash('error')的内容已经消失就不会赋值给res.locals.error,在前端也就不会显示。

解决办法是先把req.flash('error')用变量存下来

app.use(function (req, res, next) { //req.flash('error');只执行一次,随后消失,所以要先保存进变量 var err = req.flash('error'); res.locals.error = err.length ? err : null; next(); });

查看回复

回复 (12)

Z
zs1621#1·14 年前

谢谢分享~ 如果有用session的话,flash里的内容默认是存到session里,也就是说 res.locals.error = req.session? req.session.error : null

F
format#2·14 年前

学习了。 谢谢分享~

D
duyinghua#3·14 年前

你是怎么发现的?牛~

W
wpqh918#4·13 年前

太牛了。。。

Y
yakczh#5·13 年前

执行到

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

后台提示

TypeError: Object #<IncomingMessage> has no method 'flash'
Y
yakczh#6·13 年前

这里有答案 http://www.cnblogs.com/meteoric_cry/archive/2012/07/27/2604890.html 注意上述的代码,app.use(flash());要放在session之前

Q
qixiyu#7·13 年前

太感谢了!!!

N
napster99#8·13 年前

为什么我的res.locals会输出undined? 求解

  app.use(function(res, req,next) {
    console.log(res.locals); //undined
    res.locals.success = req.session? req.session.success : null;
    res.locals.user = req.session? req.session.user : null;
    res.locals.error = req.session? req.session.error : null;
  });
H
huanghaiyang#11·13 年前

太感谢了,弄了好久这个东西,原来是这个原因

Y
yuyunliuhen#12·13 年前

谢谢分享~~

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