Сообщение Fla sh не отображается на стороне клиента, как решить? - PullRequest
0 голосов
/ 09 июля 2020

Я слежу за этим учебником YouTube и пытаюсь понять, как работать с connect-flash npm. Это код, который я использую:

СЕРВЕРНАЯ СТОРОНА:

//app.js
const session = require('express-session');
const flash = require('connect-flash');

app.use(session({
  name: SESSION_NAME,
  resave: false,
  saveUninitialized: false,
  secret: SESSION_SECRET,
  cookie: {
      maxAge: SESSION_LIFETIME,
      sameSite: true,
      secure: IN_PROD
  }
}));
app.use(flash());

//users.js
//somewhere in USER LOGIN POST REQUEST:
if(!results.length) {
    console.log("    > Cannot fetch user from the database");
    req.flash('flash', 'some message in the alert');
    return res.redirect('/user_login');
}      

//USER LOGIN GET REQUEST:
router.get('/user_login', redirectHome, (req, res) => { 
    return res.render('userEntries/login', {message: req.flash('flash')});
});

КЛИЕНТСКАЯ СТОРОНА (E JS)

<body>
    <% if(message.length > 0) { %>
        <div class="alert alert-success" style="text-align: center">
            <button type="button" class="close" data-dismiss="alert">&times;</button>
            <strong>INTRO: </strong>  <%= message %>
        </div>
    <% }%>
    ......

Теперь запросы post и get отлично работают в моем приложении, но я просто не понимаю, почему сообщения fla sh не работают. Это то, что я пробовал:

  • В операторе E JS: я также пробовал if(message){...}
  • Я пытался сохранить сообщение fla sh в req.locals
  • Я пробовал использовать этот учебник - тоже не сработало.

Обратите внимание, что иногда срабатывают предупреждения, а иногда сообщения передаются несколько раз ! На рисунке ниже я дважды добавил неверное имя пользователя и пароль, ждал ок. пять минут и перезагрузили страницу, и вот что произошло:

ДЕМО

Понятия не имею, что делаю не так. Если у вас есть полезная информация, дайте мне знать. Спасибо

1 Ответ

1 голос
/ 09 июля 2020

Это потому, что вы печатаете такие ошибки, как эта

   <%= message %>

Это не сработает, потому что сообщение является массивом. Вы можете отображать свои ошибки, как показано ниже

    <%= message[0] %>

ИЛИ вы можете l oop через массив сообщений.

 for( m of message) {
         <%= m %>
 }
...