Подтвердить что ты не робот

Как отображать флеш-сообщение без обновления страницы с помощью экспресс-и соединительной вспышки?

Экспресс-подключение-вспышка отображается только после обновления. Код удаляется для удобства чтения.

"express": "~4.2.0",
"connect-flash": "~0.1.1",

И вот мой app.js

var express = require('express'),
    favicon = require('serve-favicon'),
    flash = require('connect-flash');
var app = express();
app.use(cookieParser('---'));
app.use(session({
  secret: '---',
  saveUninitialized: true,
  resave: true}));
app.use(flash());

app.use(function(req, res, next) {
  res.locals.messages = req.flash();
  next();
});

В моем маршруте я попробовал что-то вроде

req.flash('success', {msg: 'Sign Up Success'});
res.redirect('/me/dashboard');

и мой шаблон ошибки msg.jade

for msg in messages
      div #{msg.msg}

Я получаю сообщение только после обновления /redirtect. Пожалуйста, дайте мне знать, что я делаю неправильно.

Я видел этот, но его устаревший я считаю

4b9b3361

Ответ 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"});
    }
});

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