Ответ 1
Вы вызываете метод flash в промежуточном программном обеспечении, и это ожидаемое поведение промежуточного программного обеспечения. Middleware прочитает сообщение следующего запроса и установит его локальные переменные в соответствии с вашей логикой.
Как работает среднее изделие?
Когда приходит запрос, он передается первой функции промежуточного программного обеспечения вместе с обернутым объектом ServerResponse и последующим обратным вызовом. Среднее изделие может решить ответить, вызвав методы объекта ответа и/или передать запрос на следующий уровень в стеке, вызвав метод next().
подключения вспышки
Вспышка - это специальная область сеанса, используемая для хранения сообщений. Сообщения записываются на флеш и очищаются после отображения пользователю. Вспышка обычно используется в сочетании с переадресацией, гарантируя, что сообщение доступно для следующей страницы, которая должна быть отображена.
Я получаю сообщение только после обновления/перенаправления?
app.use(function(req, res, next) {
res.locals.messages = req.flash();
next();
});
Над промежуточным программным обеспечением будет вызываться каждый запрос и устанавливать значение req.flash()
. Из-за этого вы получите значения req.flash('success', {msg: 'Sign Up Success'});
для каждого следующего (последующего) запроса. Не на текущей странице без перенаправления/обновления страницы.
Чтобы переопределить это поведение для получения значений без обновления, вы вызываете функцию req.flash()
, которая может использоваться для флеш-сообщений в вашем маршрутизаторе с помощью res.locals.messages = req.flash();
.
Ex: - Показать неудавшееся сообщение входа на странице без обновления страницы и на странице перенаправления успеха после установки нового флеш-сообщения в маршрутизаторе.
router.post("/login", function (req, res) {
var username = req.body.username;
var pwd = req.body.pwd;
if (username === "demo" && pwd === "demo") {
req.flash("messages", { "success" : "Sign Up Success" });
res.redirect("/me/dashboard");
} else {
req.flash("messages", { "error" : "Invalid username or password" });
res.locals.messages = req.flash();
res.render("login', { title: 'Login"});
}
});
Заключение:. Чтобы получить сообщения на одной странице. Верните поведение промежуточного программного обеспечения, назначив значения в самом маршрутизаторе.