无法使用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或类似的东西,所以可以逃避它。