如何在Express 4.0中发送Flash消息?

所以我的web应用程序需要身份validation,并且我有一个注册页面,如果用户尝试使用已经在数据库中的电子邮件注册,我想向他们显示错误消息。 我试图做这个在html端使用这个代码:

<% if (message.length > 0) { %> <div class="alert alert-danger"><%= message %></div> <% } %> 

在我的路线中这样做:

 router.get('/signup', function(req, res) { res.render('/signup', { message: req.flash('signupMessage') }); }); 

我已经尝试设置configuration的东西沿线:

 app.configure(function() { app.use(express.session({ secret : 'keyboard cat' })); }); 

但是这给了我一个TypeError:

  12:11:38 web.1 | app.configure(function() { 12:11:38 web.1 | ^ 12:11:38 web.1 | TypeError: Object function (req, res, next) { 

我真的很困惑,因为我知道我需要的会议是闪光灯工作,但会议似乎并没有为我工作。 我也试过只使用会话,没有闪光,通过使用req.session.messages,但因为我没有会议工作,这显然没有工作。

任何见解? 我正在使用Express 4.0.0谢谢

这个要点应该回答你的问题:

https://gist.github.com/raddeus/11061808

在你的应用程序安装文件中

 app.use(flash()); 

在设置会话和cookieparsing器之后立即进行。 这真的是你应该需要使用闪存。

您正在使用:

 req.flash('signupMessage', anyValue); 

在redirect到/注册权之前?

以下是我目前用于个人网站(在我的主应用程序文件中)的一个有趣的小消息:

 app.use(function(req, res, next){ res.locals.success_messages = req.flash('success_messages'); res.locals.error_messages = req.flash('error_messages'); next(); }); 

现在,每个视图都可以访问任何闪现的错误或成功消息。 适合我。

最后一件事(这是挑剔的,但你可能会获得一些知识)。 如果你改变:

 <% if (message.length > 0) { %> 

至:

 <% if (message) { %> 

它将以相同的方式工作,但如果消息未定义,则不会失败。 未定义的和空的string在JavaScript中都被认为是“falsy”值。

编辑:我的cookie /会话/闪存设置如下:

 app.use(cookieParser('secretString')); app.use(session({cookie: { maxAge: 60000 }})); app.use(flash()); 

也许看到你的应用程序设置代码会有帮助 另外请注意,Express 4中不再需要使用app.configure。

最终编辑: https : //gist.github.com/raddeus/11061808

这是一个工作的例子。 运行该应用程序后,转到localhost:3000,你应该可以在屏幕上看到['it worked']

https://gist.github.com/brianmacarthur/a4e3e0093d368aa8e423

最初,我也是被Express 4中的闪存信息所困惑。我对这个问题的困惑部分来自于闪存消息这一概念与模板可用的临时消息之间的区别,以及闪存消息的各种实现, express-flash ,其他模块和自定义中间件。

为了扩展上面的Thad Blankenship的出色响应,我为初学者创build了一个Gist,包括两种flash消息处理方式 – express-flash模块和自定义中间件 – 以jade,ejs或handlebars呈现。

自述文件包括有关getter- req.flash(type) setter- req.flash(type, message)详细req.flash(type, message) express-flash公开的方法以及它们与res.locals不同之res.locals在自定义中间件中通过express-session公开的req.session对象。

要显示Flash消息,您必须使用cmd在您的项目中安装Flash模块。

 npm install express-session --save npm install cookie-parser --save npm install connect-flash --save 

现在你必须添加一些代码到app.js文件来访问这些模块。 我们来添加这些代码。

 var session = require('express-session'); var cookieParser = require('cookie-parser'); var flash = require('connect-flash'); var app = express(); app.use(cookieParser('secret')); app.use(session({cookie: { maxAge: 60000 }})); app.use(flash()); 

现在生成Flash消息

 req.flash('success', 'Registration successfully'); res.locals.message = req.flash(); 

要在视图文件中显示Flash消息,请使用代码

 <% if(locals.message){ %> <div class="alert alert-success" role="alert">  <strong>Well done!</strong> <%=message.success%>  </div> <% } %> 

这就是全部。这里是完整的指南