HTML中的EJS无法正常工作

时间:2014-08-05 14:01:55

标签: html frontend sails.js ejs

这是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">&times;</button>
                        <b>Alert!</b> Wrong
                    </div>
                </div>
            <% } %>

2 个答案:

答案 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()}});

这是一个人为的例子,但你有它。