在Express.js中,如何让我的模板显示Flash消息?

app.get('/',function(req,res){ res.render('home'); // I want the template to be able to access the flash message.. }); app.get('/go',function(req,res){ req.flash("info", "You went GO, and got redirected to home!"); res.redirect('/'); }); 

用户首先去“/去”。 之后,他将被redirect到“/”,我想要一个Flash消息显示为一个JavaScript警报。

我怎样才能做到这一点?

将其添加为您的调用的本地渲染:

 res.render("home", {info: req.flash("info")}); 

并在你的模板中使用它:

 #flash p= info 

你可以使用快递dynamic帮手,让你的生活更轻松。

 app.dynamicHelpers({flashMessages: function(req, res) { var html = "" , flash = req.flash(); ['error', 'info'].forEach(function(type) { if(flash[type]) { flash[type].forEach(function(message) { html += "<div class='alert " + type + "'>" + message + "</div>"; }); } }); return html; }}); 

并在你的布局(例如)

  <body><%- flashMessages %><%- body %></body> 
 app.dynamicHelpers({flash: function(req, res){return req.flash();}}); 

现在,您可以访问您查看的Flash对象。 您的逻辑中没有HTML,也不需要在每个路由中添加所有的参数。

对我而言,我使用下面的代码来显示flash消息:

app.js中

 app.use(function (req, res, next) { req.session.message = req.session.message || { error: [], success: [], info: [] }; app.locals.message = req.session.message; } 

在你的user.js路由中:

 app.post('/users/new', function (req, res, next) { //... // do some work req.session.message.info.push('Account created successfully'); res.redirect('/login'); }); 

然后,创build一个message.jade ,以便可以将其包含到其他视图中:

message.jade中

 - var i - if (message.error && message.error.length) .alert.alert-warning.alert-dismissable button.close(type="button", data-dismiss="alert", aria-hidden="true") &times; - for (i = 0; i < message.error.length; i++) .center!= message.error[i] - if (message.info && message.info.length) .alert.alert-info.alert-dismissable button.close(type="button", data-dismiss="alert", aria-hidden="true") &times; - for (i = 0; i < message.info.length; i++) .center!= message.info[i] - message.info = message.error = [] // REMEMBER to reset messages to an empty array 

有类似的问题,解决scheme似乎是:

 req.flash('error', 'validation failed'); res.redirect('back'); 

使用后面似乎保持闪光消息,在那里redirect到相同的路线失去它。

如果您使用的是Express 3,则内置的闪存function已被删除。 为了获得相同的function,您需要安装connect-flash模块,然后在初始化会话之后以及app.use(app.router);之前添加此Gist的代码app.use(app.router); : https : //gist.github.com/3070950