我在连接闪存时遇到了一些奇怪的问题,我以完全相同的方式在其他项目中使用它并且工作正常,这是我所拥有的:
某条路线
if (err) {
req.flash('message', [{
class: 'alert-danger',
message: 'TEST'
}]);
res.redirect('/error');
}
错误路由
router.get('/error', function (req, res, next) {
console.log('---in error route')
console.log(req.flash('message'));
res.render('error', {
message: req.flash('message'),
layout: layout
});
})
控制台.log
---in error route
[ { class: 'alert-danger', message: 'TEST' } ]
错误.hbs
{{#if message}}
{{#each message}}
<div class="{{this.class}}">{{this.message}}</div>
{{/each}}
{{/if}}
显然它在那里,但没有打印输出,如果我从第一个路由复制到错误,它会显示(这对我不起作用,而只是用于测试以确保 hbs 模板逻辑有效):
router.get('/error', function (req, res, next) {
req.flash('message', [{
class: 'alert-danger',
message: 'TEST'
}]);
res.render('error', {
message: req.flash('message'),
layout: layout
});
})
这可能很简单,但我不知道它是什么。
经过一些实验,纯属偶然,我发现控制台.log显然清除了闪光灯!!!
我希望这对遇到此问题的任何人都有帮助。
我知道您已经找到了解决方案,但是对于遇到相同问题的任何人来说,问题实际上是当您使用req.flash()
检索闪存消息时,它实际上会在检索该消息后删除该消息。
如果你这样做了:
console.log(req.flash('message'));
console.log(req.flash('message'));
您将收到类似于以下输出的内容:
[ 'TEST' ]
[]
这是因为对req.flash('message')
的第一次调用检索和删除给定的消息。
此外,您是否这样做了:
req.flash('message');
console.log(req.flash('message'));
console.log(req.flash('message'));
您将收到类似于以下内容的输出:
[]
[]
检查您正在使用的快递版本。我在使用带有连接闪存的快速 4.x.x 时遇到了同样的问题。Connect-flash适用于Express 3.x.x,Connect-flash-plus适用于Express 4.x.x。