Как я могу исправить div от connect-flash, они всегда активны (я использую мопса)? - PullRequest
0 голосов
/ 27 октября 2018

Так что у меня есть это в моем 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 пустых бара. Divs В чем дело ?

1 Ответ

0 голосов
/ 28 октября 2018

Это произойдет, когда переменные success_messages и error_messages равны truey .Обратите внимание на документацию MDN, что пустые массивы и пустые объекты все еще будут оцениваться как истинные в операторе if.

В вашем маршруте добавьте эти две строки, и вы увидите, что именно вы передаете в шаблон.Если это выглядит как [] или {}, тогда оператор if в pug пройдет проверку на достоверность, и эти 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

Это явный тест, который не отступает от истинности, которая иногда может дать неожиданные результаты.

...