无法使用ejs模板显示Flash消息

我是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> <% } %> 

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

请有人帮助我。 非常感谢。

警告框不断出现,因为req.session.flash对象保持了会话,所以你需要在使用它之后将它req.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表示“转义并输出”。 这不是模板HTML或类似的东西,所以可以逃避它。