web-dev-qa-db-ja.com

res.redirect( '/')sailsjsを使用してフラッシュメッセージを送信する方法

Sailsでres.redirect('/')を使用してフラッシュメッセージを送信するにはどうすればよいですか?

コントローラーの状態を確認したら、フラッシュメッセージを渡して、別の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('/');
    }

  }
}

前もって感謝します。

14
Lucifer

あなたのコードはコントローラーにとっては問題ないように見えます。あなたの見解では、フラッシュメッセージにreq.flash('message')としてアクセスできるため、たとえば.ejsファイルでは<%- req.flash('message') %>になります。

18
sgress454

他の解決策は、リダイレクトされたテンプレートをレンダリングするルートでメッセージパラメータを渡すことです。

それでは、例を見てみましょう(少し変更しました):

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();
});
1
Constantin Stan

データを使用したリダイレクトに適していると思うのは、httpコードを307に設定することです。post/ put/deleteデータを使用してリダイレクトします。

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