Как часть общего маршрута get в экспресс-приложении, я хочу отправить два флеш-сообщения с помощью express-session и connect-flash.Это все работает, за исключением того, что req.flash не сохраняет до отображения страницы.В результате флэш-сообщения не отображаются до тех пор, пока пользователь не загрузит другую страницу или эту же страницу снова.
Код последней функции в маршруте:
Post.countDocuments().exec(function(err, count){
if(err) {
console.log(err);
res.redirect("back");
}
req.flash("success", ["It's working", "Hallelujah!"]);
req.flash("error", ["Uh oh!", "We have a problem..."]);
res.render("index", {posts: allPosts, dates: dates, current: pageNumber, pages: Math.ceil(count / pageLimit), showing: showing, total: count});
});
и воткод для одного из шаблонов флеш-сообщений (ejs):
<div class="flash flash-success">
<div class="flash-header">
<span class="flash-title flash-title-success"><i class="fas fa-check"></i> <%= success[0] %></span>
<span class="flash-close" onclick="return closeFlash(this);"><i class="fas fa-times"></i></span>
</div>
<hr class="flash-hr">
<div class="flash-body-success"><%= success[1] %></div>
</div>
Я пытался использовать .exec () после req.flash, чтобы оператор рендеринга выполнялся по завершении, но это не сработало, и я 'Мы также пробовали req.session.save () с оператором рендеринга в обратном вызове, но это также не удалось.
Проблема не решается ни избавлением от одного из операторов req.flash, ни передачей только одного строкового аргумента вместо массива из двух.