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

BHe*_*cks 40 javascript session node.js express

因此,我的Web应用程序需要身份验证,并且我有一个注册页面,如果此人尝试使用已存在于数据库中的电子邮件进行注册,我想向他们显示错误消息.我试图在html端使用此代码执行此操作:

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

并在我的路线中这样做:

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

我已尝试使用以下内容设置配置:

app.configure(function() {
 app.use(express.session({ secret : 'keyboard cat' })); 
});
Run Code Online (Sandbox Code Playgroud)

但这给了我一个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) {
Run Code Online (Sandbox Code Playgroud)

我真的很困惑,因为我知道我需要会话才能让flash工作,但是会话对我来说似乎没有用.我也尝试过使用req.session.messages只使用会话而不使用flash,但由于我没有使用会话这显然不起作用.

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

Tha*_*hip 76

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

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

在您的应用程序设置文件中

app.use(flash());
Run Code Online (Sandbox Code Playgroud)

在设置会话和cookie解析器之后立即放置.这真的是你需要使用闪存.

您正在使用:

req.flash('signupMessage', anyValue);
Run Code Online (Sandbox Code Playgroud)

在重定向到/注册之前对吗?

这是一个有趣的小花絮,我目前用于个人网站(在我的主应用程序文件中):

app.use(function(req, res, next){
    res.locals.success_messages = req.flash('success_messages');
    res.locals.error_messages = req.flash('error_messages');
    next();
});
Run Code Online (Sandbox Code Playgroud)

现在,每个视图都可以访问您闪存的任何错误或成功消息.对我来说效果很好.

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

<% if (message.length > 0) { %>
Run Code Online (Sandbox Code Playgroud)

至:

<% if (message) { %>
Run Code Online (Sandbox Code Playgroud)

它将以相同的方式工作,但如果消息未定义则不会失败.未定义和空字符串在javascript中都被视为"虚假"值.

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

app.use(cookieParser('secretString'));
app.use(session({cookie: { maxAge: 60000 }}));
app.use(flash());
Run Code Online (Sandbox Code Playgroud)

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

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

这是一个有效的例子.运行该应用程序后转到localhost:3000,您应该['it worked']在屏幕上看到.


Poi*_*Oak 21

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

我也开始对Express 4中的flash消息感到困惑.我的困惑部分来自于flash消息的概念,模板可用的临时消息和flash消息的各种实现之间的区别,其中包括express-flash其他模块和自定义中间件.

为了扩展上面Thad Blankenship的出色响应,我为初学者创建了一个Gist,其中包括两种闪存消息方法 - express-flash模块和自定义中间件 - 用玉器,ejs或把手呈现.

该自述包括有关细节getter-- req.flash(type)--and setter-- req.flash(type, message)--methods被暴露express-flash,以及他们如何从开采不同res.locals,并req.session通过公开的对象express-session自定义的中间件.

  • 祝福你的心. (3认同)

小智 6

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

npm install express-session --save

npm install cookie-parser --save

npm install connect-flash --save
Run Code Online (Sandbox Code Playgroud)

现在,您必须向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());
Run Code Online (Sandbox Code Playgroud)

现在生成即时消息

req.flash('success', 'Registration successfully');
res.locals.message = req.flash();
Run Code Online (Sandbox Code Playgroud)

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

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

  • 我想知道我们如何确保前端知道它是“成功”消息还是“错误”消息 (2认同)