Как отправить флеш-сообщение с res.redirect('/') sails js

Как отправить флеш-сообщение с помощью res.redirect('/') в Sails?

Когда я проверяю какое-то условие в контроллере, я хочу перенаправить на другой URL-адрес, пропуская флеш-сообщение.

Я новичок в Sails, поэтому любая помощь будет оценена.

Действие контроллера:

module.exports ={
   index: function (req, res) {

    if(req.param('key')){
      req.flash('message', 'welcome key is present');
      res.redirect('/view/');
    } else {
      req.flash('message', 'welcome key is not present');
      res.redirect('/');
    }

  }
}

Спасибо заранее.

Ответ 1

Ваш код отлично выглядит для контроллера. По вашему мнению, вы можете получить доступ к флэш-сообщению как req.flash('message'), поэтому в файле .ejs, например, это будет <%- req.flash('message') %>

Ответ 2

То, что я нахожу лучше для любой переадресации с данными, заключается в том, чтобы установить http-код на 307. Он будет перенаправляться с данными post/put/delete.

req.flash('message');
res.redirect(307, '/');

Ответ 3

Другим решением было бы передать параметр сообщения на маршруте, на котором вы отображаете перенаправленный шаблон.

Итак, давайте рассмотрим ваш пример (слегка измененный):

module.exports ={
   index: function (req, res) {

    if(req.param('key')){
      req.flash('info', 'welcome key is present' );
      res.redirect('/view/');
    } else {
      req.flash('info', 'welcome key is not present');
      res.redirect('/');
    }

  }
}

Затем на маршруте для "просмотра" у вас будет что-то вроде этого:

app.get('/view', function(req, res){
    var messages = {};
    if (typeof res.locals.messages.info != 'undefined'){
        messages = res.locals.messages.info;
    }
    res.render('view.ejs', {
        messages: messages
    });
});

Затем в вашем view.ejs:

<% if (typeof messages != 'undefined' && messages.length > 0) { %>
            <% for (var i in messages) { %>
                <div class="alert alert-info">
                    <%= messages[i] %>
                </div>
            <% } %>
<% } %>

Также в вашем основном файле server.js:

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