Express. js ошибка приложения: fla sh сообщения не отображаются - PullRequest
0 голосов
/ 04 марта 2020

Я работаю над приложением для ведения блога (нажмите на ссылку, чтобы увидеть репозиторий GitHub ) с Express, E JS и MongoDB.

У меня возникают проблемы при попытке добавить fla sh сообщения после каждой операции CRUD.

Для Add Post (сама операция работает ), у меня есть:

exports.addPost = (req, res, next) => {
    const post = new Post();
        post.title = req.body.title;
        post.short_description = req.body.excerpt
        post.full_text = req.body.body;

    post.save(function(err){
        if(err){
            console.log(err);
            return;
        } else {
            // Confirmation message
            req.flash('success', "Post added");
            res.redirect('/dashboard');
        }
    });
}

В моем индексе. js файла Я добавил все необходимые пакеты и промежуточное ПО:

const expressValidator = require("express-validator");
const flash = require("connect-flash");
const session = require("express-session");

// more code

// Express Sessions Middleware
app.use(session({
  secret: 'keyboard cat',
  resave: true,
  saveUninitialized: true
}));

// Express Messages Middleware
app.use(flash());
app.use(function (req, res, next) {
  res.locals.messages = require('express-messages')(req, res);
  next();
});

// Express Validator Middleware
app.use(expressValidator({
  errorFormatter: function(param, msg, value) {
      var namespace = param.split('.')
      , root    = namespace.shift()
      , formParam = root;

    while(namespace.length) {
      formParam += '[' + namespace.shift() + ']';
    }
    return {
      param : formParam,
      msg   : msg,
      value : value
    };
  }
}));

Шаблон сообщений (в виде https://github.com/visionmedia/express-messages и немного изменены):

<div id="messages">
  <% Object.keys(messages).forEach(function (type) { %>
        <% messages[type].forEach(function (message) { %>
            <div class="alert alert-<%= type %>"><%= message %></div>
        <% }) %>
  <% }) %>
</div>

Я думал, что все сделал правильно, и все же контейнер сообщений отображается пустым:

<div id="messages">
 // messages should be here
</div>

Чего не хватает?

Примечание: express-validator версия, которую я использую - 3.2.1.

1 Ответ

1 голос
/ 04 марта 2020

Fla sh сообщения асинхронные, поэтому вам нужно обернуть, перенаправить:

req.flash('success', "Post added");
req.session.save(() => res.redirect('/dashboard'));

Примерно так.

...