如何使用快速和连接闪光显示未刷新页面的闪光消息?

快速连接闪存仅在刷新后显示。 代码被剥离以方便阅读。

"express": "~4.2.0", "connect-flash": "~0.1.1", 

这里是我的app.js

 var express = require('express'), favicon = require('serve-favicon'), flash = require('connect-flash'); var app = express(); app.use(cookieParser('---')); app.use(session({ secret: '---', saveUninitialized: true, resave: true})); app.use(flash()); app.use(function(req, res, next) { res.locals.messages = req.flash(); next(); }); 

在我的路线上我尝试了类似的东西

 req.flash('success', {msg: 'Sign Up Success'}); res.redirect('/me/dashboard'); 

和我的错误显示msg.jade模板是

 for msg in messages div #{msg.msg} 

我只是在刷新/重新encryption之后才收到消息。 请让我知道我做错了什么。

我也看到了这个 ,但是我认为它已经过时了

       

网上收集的解决方案 "如何使用快速和连接闪光显示未刷新页面的闪光消息?"

您正在调用中间件中的flash方法,这是中间件的预期行为。 中间件将在下一个请求中读取消息,并根据您的逻辑设置局部variables。

中间件如何工作?

当一个请求进入时,它会被传递到第一个中间件函数,以及一个包装的ServerResponse对象和一个下一个callback。 中间件可以通过调用响应对象的方法决定响应,或者通过调用next()方法将请求传递给堆栈中的下一层。

连接闪存

闪存是用于存储消息的会话的特殊区域。 消息被写入闪存并在显示给用户后清除。 Flash通常与redirect结合使用,确保消息可用于要呈现的下一页。

我只在刷新/redirect后才收到消息?

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

以上中间件将调用每个请求并设置req.flash()值。 因此,您将获得req.flash('success', {msg: 'Sign Up Success'}); 每个下一个(后续)请求上的值。不在当前页面上而不redirect/刷新页面。

要覆盖这种行为来获取没有刷新的值,可以使用res.locals.messages = req.flash();调用可用于路由器中flash消息的req.flash()函数res.locals.messages = req.flash();

例如: – 在路由器中设置新的Flash消息后,在页面上显示失败的login消息而不刷新页面,并在成功redirect页面上显示。

 router.post("/login", function (req, res) { var username = req.body.username; var pwd = req.body.pwd; if (username === "demo" && pwd === "demo") { req.flash("messages", { "success" : "Sign Up Success" }); res.redirect("/me/dashboard"); } else { req.flash("messages", { "error" : "Invalid username or password" }); res.locals.messages = req.flash(); res.render("login', { title: 'Login"}); } }); 

结论:在同一页面上获取消息。通过在路由器中分配值来覆盖中间件的行为。