Jade中的Flash消息

时间:2014-05-10 17:29:15

标签: node.js express pug passport.js

遵循此示例:http://scotch.io/tutorials/javascript/easy-node-authentication-setup-and-local,除Flash消息部分外,一切正常。

我已将视图引擎更改为Jade而不是EJS,但我似乎无法显示flash消息。

ejs视图中提供的代码是:

<% if (message.length > 0) { %>
  <div class="alert alert-danger"><%= message %></div>
<% } %>

我想我可以为Jade做这件事:

if #{message}
  p message

甚至:

if message
  p message

但没有成功。知道我做错了吗?

注意我已根据教程

包含了所有必需的库

3 个答案:

答案 0 :(得分:8)

以下是我在玉器中使用闪光灯的方法......

-if(messages)
        div#note #{messages}

并使用它来渲染您的视图,将消息var传递给您的视图

req.flash('info', "Credenciales invalidas, intente nuevamente");
res.render('index', {messages: req.flash('info')});

这对我有用

答案 1 :(得分:1)

我继续使用像这样的自定义回调:

app.post('/login', function(req, res, next) {
        passport.authenticate('local-login', function(err, user, info) {
            if (err) { return next(err); }
            if (!user) { return res.render('login', {message: req.flash('loginMessage')}); }
            req.logIn(user, function(err) {
                if (err) { return next(err); }
                return res.redirect('/users/' + user.username);
            });
        })(req, res, next);
    });

答案 2 :(得分:0)

这对我有用(由@Xianlin评论)。路线:

app.get('/login', function(req, res) {
    res.render('login', { message: req.flash('loginMessage') });
});

app.post('/login', urlencodedParser, passport.authenticate('local-login', {
    successRedirect : '/profile',
    failureRedirect : '/login',
    failureFlash : true
}));

使用Passport返回所需的错误消息:

return done(null, false, req.flash('loginMessage', 'That email address does not exist'));

最后在Jade:

if (message.length > 0)
  #alert
    p= message

希望这有帮助!