我如何修复 connect-flash 中的 div,它们始终处于活动状态(我使用的是哈巴狗)?
How can i fix divs from connect-flash, they are allways active(i am using pug)?
所以我的 app.js 中有这个:
var flash = require('connect-flash');
app.use(flash());
app.use(function(req , res , next){
res.locals.success_messages = req.flash('success');
res.locals.error_messages = req.flash('error');
next();
});
在我的 layout.pug 中,我有:(就在块内容之前)
if success_messages
.alert.alert-success=success_messages
if error_messages
.alert.alert-danger=error_messages
当我使用它时:
req.flash('error','All fields required!');
和成功。
但是 div(class="alert alert-danger")
和 div(class="alert alert-success")
总是在我页面的顶部,没有消息,只有 2 个空栏。
怎么了 ?
这将在变量 success_messages
和 error_messages
为 truthy 时发生。从 MDN 文档中注意到,空数组和空对象在 if 语句中仍然会被评估为 true。
在您的路线中添加这两行,您将清楚地看到您传递到模板中的内容。如果它看起来像 []
或 {}
那么 pug 中的 if 语句将通过 truthy 测试并且那些 div 将呈现空白。
console.log( 'success_messages is ' + JSON.stringify(success_messages) );
console.log( 'error_messages is ' + JSON.stringify(error_messages) );
您可以通过在模板中添加长度测试来解决此问题(我假设您从 connect-flash 获取数组):
if success_messages.length > 0
.alert.alert-success=success_messages
if error_messages.length > 0
.alert.alert-danger=error_messages
这是一个显式测试,不会回退到有时会产生意外结果的真实性。
所以我的 app.js 中有这个: var flash = require('connect-flash');
app.use(flash());
app.use(function(req , res , next){
res.locals.success_messages = req.flash('success');
res.locals.error_messages = req.flash('error');
next();
});
在我的 layout.pug 中,我有:(就在块内容之前)
if success_messages
.alert.alert-success=success_messages
if error_messages
.alert.alert-danger=error_messages
当我使用它时:
req.flash('error','All fields required!');
和成功。
但是 div(class="alert alert-danger")
和 div(class="alert alert-success")
总是在我页面的顶部,没有消息,只有 2 个空栏。
这将在变量 success_messages
和 error_messages
为 truthy 时发生。从 MDN 文档中注意到,空数组和空对象在 if 语句中仍然会被评估为 true。
在您的路线中添加这两行,您将清楚地看到您传递到模板中的内容。如果它看起来像 []
或 {}
那么 pug 中的 if 语句将通过 truthy 测试并且那些 div 将呈现空白。
console.log( 'success_messages is ' + JSON.stringify(success_messages) );
console.log( 'error_messages is ' + JSON.stringify(error_messages) );
您可以通过在模板中添加长度测试来解决此问题(我假设您从 connect-flash 获取数组):
if success_messages.length > 0
.alert.alert-success=success_messages
if error_messages.length > 0
.alert.alert-danger=error_messages
这是一个显式测试,不会回退到有时会产生意外结果的真实性。