仅在刷新后才显示快速连接闪存。代码被剥离以便于阅读。
"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}
仅在刷新/重新定向后才收到消息。请让我知道我在做什么错。
我也看到了,但我认为它已经过时了
您正在中间件中调用flash方法,这是中间件的预期行为。中间件将在下一个请求时读取消息,并根据您的逻辑将其设置为局部变量。
中间件如何工作?
当请求进入时,它连同包装的ServerResponse对象和下一个回调一起传递给第一个中间件功能。中间件可以决定通过调用响应对象上的方法来做出响应,和/或通过调用方法next()将请求传递给堆栈中的下一层。
连接闪存
闪存是会话中用于存储消息的特殊区域。消息被写入闪存,并在显示给用户后清除。Flash通常与重定向结合使用,以确保该消息可用于将要呈现的下一页。
仅在刷新/重定向后才收到消息?
app.use(function(req, res, next) {
res.locals.messages = req.flash();
next();
});
上面的中间件将在每个请求上调用并设置req.flash()
值。因此,您将req.flash('success', {msg: 'Sign Up Success'});
在每个下一个(后续)请求中获取值。如果不重定向/刷新页面,则不会在当前页面上获取值。
要覆盖此行为以获取不刷新的值,您req.flash()
可以使用调用该函数,该函数可用于路由器中的Flash消息res.locals.messages = req.flash();
。
例如:-在路由器中设置新的刷新消息后,在不刷新页面的页面上显示失败的登录消息,而在成功重定向页面上显示失败的登录消息。
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"});
}
});
结论:要获得同一页面上的消息。通过在路由器本身中分配值来覆盖中间件的行为。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句