node.js – 使用Connect-flash和Jade的警报消息

我正在使用node.js,express和Passport构建一个具有登录身份验证的站点.对于注册页面,我希望网站在已经使用用户名时发送消息,现在以下代码工作正常,但我想添加一个“警报”类型的消息,背景略带红色高亮文字.

signup.jade的代码是这样的:

          div(class="col-lg-12")
                form(class="form" method="post" action="/SignupForm")
                    -if(message)
                        div#note #{message}                      
                    label(class="col-lg-12") username
                    input(type="text" name="username")
                    br
                    label(class="col-lg-12") password
                    input(type="password" name="password")
                    br
                    label(class="col-lg-12") email
                    input(type="email" name="email")
                    br
                    input(type="submit" value="Signup")

对于我的路线,我的代码就是这个(它在module.exports里面)

app.get('/SignupForm', function(req,res){                                       
    res.render('SignUp', {message: req.flash('signupMessage')});
});

app.post('/SignupForm', passport.authenticate('localSignup', {
    successRedirect: '/',
    failureRedirect: '/SignupForm',
    failureFlash: true
}));

最后,对于Passport.js文件,这是代码:

passport.use('localSignup', new localStrategy({
    usernameField: 'username',
    passwordField: 'password',
    passReqToCallback: true
},
    function (req, username, password, done) {
        process.nextTick(function () {
            User.findOne({'username' : username}, function (err, user) {
                if (err)
                    return done(err);
                else if (user){
                    return done(null, false, req.flash('signupMessage', 'User already taken'));
                } else {
                    var newUser = new User({username: username, password: password);
                    newUser.save(function (err) {
                        if (err) throw err;
                        return done (null, newUser);
                    });
                }
            });
        });
    })
);

顺便说一下,我已经尝试过使用bootstrap警告消息,如下所示:

.alert.alert-danger !{ message }

但是这会立即显示注册页面内的突出显示区域,即使该消息尚未发送.

最佳答案 那么,根据你的说法,上面的代码工作正常,但是,即使它尚未发送,也会显示消息.

要解决此问题,您可以将html / jade文件修改为:

if message
    .alert.alert-danger #{message}

此代码可让您仅在服务器发送消息时显示消息.如果未发送消息,则消息的值将不存在,并且不会执行代码.

希望它有所帮助..如果不通过编辑问题提供更多细节.

点赞