我如何修复 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_messageserror_messagestruthy 时发生。从 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

这是一个显式测试,不会回退到有时会产生意外结果的真实性。