无法使用ejs模板在视图中显示Flash消息

时间:2015-04-12 18:54:30

标签: node.js sails.js ejs

我是NodeJS的新手。我有一个问题,我无法在我的视图中显示Flash消息。 这是我的控制器,

index : function(req, res){
    res.locals.flash = _.clone(req.session.flash);
    res.locals.layout = false;
    res.view('login');
},
login : function(req, res){

       ....

        if(!admin){
            req.session.flash = {
                err : 'User is not found.' // My flash message
            }
            res.locals.layout = false;
            res.redirect('login'); 
            return;
        }

      .....
}

以下是我的观点,

    <% if(flash && flash.err) { %>
    <div class="alert alert-danger">
    <% JSON.stringify(flash.err) %>
    </div>
    <% } %>   

当登录为false时,它只显示一个空的警告框。 我有第二个问题。当我刷新页面时,警告框不会消失。

是的,请有人帮助我。 非常感谢。

1 个答案:

答案 0 :(得分:4)

警告框会一直显示,因为req.session.flash对象会保留会话,因此您需要在使用后将其取消,或者您只需使用req.flash(),那对你而言。因此,将index方法更改为以下内容:

index: function(req, res) {
    // req.flash() returns the contents of req.session.flash and flushes it
    // so it doesn't appear on next page load. No need to clone.
    res.locals.flash = req.flash();
    res.locals.layout = false;
    res.view('login');
},

现在,关于第二个问题。错误消息不会显示,因为您没有使用正确的EJS语法将转义值输出到视图中。您需要做的就是将代码更改为:

<% if(flash && flash.err) { %>
    <div class="alert alert-danger">
        // Change <% to <%=
        <%= flash.err %>
    </div>
<% } %> 

除非你喜欢引号,否则不需要JSON.stringify。 请注意,我已将<%更改为<%= ,这在EJS中表示&#34;将其转义并输出&#34;。它不是模板HTML或类似的东西,所以无论如何它都可以逃脱它。