在呈现页面之前不保存 flash 消息(节点)
flash messages are not saved before the page is rendered (node)
作为 express 应用程序中通用获取路由的一部分,我想使用 express-session 和 connect-flash 发送两条 flash 消息。这一切都有效,除了 req.flash 在页面呈现之前不保存。因此,在用户再次加载另一个页面或同一页面之前,不会显示即显消息。
路由中最后一个函数的代码:
Post.countDocuments().exec(function(err, count){
if(err) {
console.log(err);
res.redirect("back");
}
req.flash("success", ["It's working", "Hallelujah!"]);
req.flash("error", ["Uh oh!", "We have a problem..."]);
res.render("index", {posts: allPosts, dates: dates, current: pageNumber, pages: Math.ceil(count / pageLimit), showing: showing, total: count});
});
这里是 Flash 消息模板 (ejs) 之一的代码:
<div class="flash flash-success">
<div class="flash-header">
<span class="flash-title flash-title-success"><i class="fas fa-check"></i> <%= success[0] %></span>
<span class="flash-close" onclick="return closeFlash(this);"><i class="fas fa-times"></i></span>
</div>
<hr class="flash-hr">
<div class="flash-body-success"><%= success[1] %></div>
</div>
我试过在 req.flash 之后使用 .exec() 来使渲染语句 运行 完成,但这没有用,我也试过 req.session.save()在回调中使用渲染语句,但这也失败了。
删除其中一个 req.flash 语句或仅传递一个字符串参数而不是两个数组都无法解决该问题。
问题是我有
app.use(function(req, res, next) {
res.locals.currentUser = req.user;
res.locals.error = req.flash("error);
res.locals.success = req.flash("success");
return next();
});
在 app.js 中,所以在路由有机会为 req.flash 设置值之前这个中间件是 运行,这意味着错误和成功被设置为空。
我通过创建一个函数来解决这个问题,在呈现页面之前将 req.flash 保存在 res.locals 中:
var toolsObj = {};
toolsObj.saveFlash = function(req, res) {
res.locals.error = req.flash("error");
res.locals.success = req.flash("success");
};
module.exports = toolsObj;
作为 express 应用程序中通用获取路由的一部分,我想使用 express-session 和 connect-flash 发送两条 flash 消息。这一切都有效,除了 req.flash 在页面呈现之前不保存。因此,在用户再次加载另一个页面或同一页面之前,不会显示即显消息。
路由中最后一个函数的代码:
Post.countDocuments().exec(function(err, count){
if(err) {
console.log(err);
res.redirect("back");
}
req.flash("success", ["It's working", "Hallelujah!"]);
req.flash("error", ["Uh oh!", "We have a problem..."]);
res.render("index", {posts: allPosts, dates: dates, current: pageNumber, pages: Math.ceil(count / pageLimit), showing: showing, total: count});
});
这里是 Flash 消息模板 (ejs) 之一的代码:
<div class="flash flash-success">
<div class="flash-header">
<span class="flash-title flash-title-success"><i class="fas fa-check"></i> <%= success[0] %></span>
<span class="flash-close" onclick="return closeFlash(this);"><i class="fas fa-times"></i></span>
</div>
<hr class="flash-hr">
<div class="flash-body-success"><%= success[1] %></div>
</div>
我试过在 req.flash 之后使用 .exec() 来使渲染语句 运行 完成,但这没有用,我也试过 req.session.save()在回调中使用渲染语句,但这也失败了。
删除其中一个 req.flash 语句或仅传递一个字符串参数而不是两个数组都无法解决该问题。
问题是我有
app.use(function(req, res, next) {
res.locals.currentUser = req.user;
res.locals.error = req.flash("error);
res.locals.success = req.flash("success");
return next();
});
在 app.js 中,所以在路由有机会为 req.flash 设置值之前这个中间件是 运行,这意味着错误和成功被设置为空。
我通过创建一个函数来解决这个问题,在呈现页面之前将 req.flash 保存在 res.locals 中:
var toolsObj = {};
toolsObj.saveFlash = function(req, res) {
res.locals.error = req.flash("error");
res.locals.success = req.flash("success");
};
module.exports = toolsObj;