这是HTML中EJS技术的正确语法吗? “flash对象”从控制器发送。这是我在Controller和HTML代码中的“登录”操作。我希望基于“flash对象”的内容执行HTML的和平。但它不起作用。这是后端的控制器:
login: function(req, res){
var x = new LdapService();
x.login(req.body.userid, req.body.password, function(isAuth){
if(isAuth ){
res.send('successful login');
}
else{
res.view('login/index', {locals: {flash: req.flash('error', 'Wrong Credentials')}}) ;
}
});
},
============================================= 这是前端的HTML代码。
<% if (req.flash('error')!=''){ %>
<p>Hi</p>
<p><%- (req.flash('error')) %></p>
<div class="box-body">
<div class="alert alert-danger alert-dismissable">
<i class="fa fa-ban"></i>
<button type="button" class="close" data-dismiss="alert" aria-hidden="true">×</button>
<b>Alert!</b> Wrong
</div>
</div>
<% } %>
答案 0 :(得分:1)
使用req.flash
访问Flash对象后,其值将被清除。因此条件测试将清除flash对象。
该值也存储在会话中,因此我在显示flash值之前直接测试会话。
<% if(req.session.flash && req.session.flash.error){ %>
<div class="row form-row m-l-20 m-r-20 xs-m-l-10 xs-m-r-10">
<div class="alert alert-error">
<button class="close" data-dismiss="alert"></button>
<%- req.flash('error') %>
</div>
</div>
<% }%>
答案 1 :(得分:0)
在这种情况下,您需要使用Flash消息并不完全清楚,因为您正在设置消息并在同一请求中显示消息。当您重新设置消息然后重定向时,Flash消息更合适,因为重定向之前的代码没有机会直接设置视图本地。你可以这么做:
res.view('login/index', {locals: {flash: {'error':'Wrong Credentials'}}});
并在您的模板中:
<% if((flash = {} || flash) && flash.error){ %>
<div class="row form-row m-l-20 m-r-20 xs-m-l-10 xs-m-r-10">
<div class="alert alert-error">
<button class="close" data-dismiss="alert"></button>
<%- flash.error %>
</div>
</div>
<% }%>
如果您从另一个视图重定向,则可以使用Flash消息并保留相同的模板。在您从重定向的操作中,您需要设置一条Flash消息:
req.flash('error', 'my error message');
res.redirect('/someOtherLoginRoute');
在您重定向到TO的操作中,执行:
res.view("login/index", {locals: {flash: req.flash()}});
这是一个人为的例子,但你有它。