【问题标题】:Alert message with Connect-flash and Jade带有 Connect-flash 和 Jade 的警报消息
【发布时间】:2015-08-03 08:01:35
【问题描述】:

我正在使用 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);
                    });
                }
            });
        });
    })
);

顺便说一句,我已经尝试过使用引导警报消息,如下所示:

.alert.alert-danger !{ message }

但这会立即在注册页面内显示一个突出显示的区域,即使消息尚未发送也是如此。

【问题讨论】:

    标签: node.js twitter-bootstrap express passport.js connect-flash


    【解决方案1】:

    好吧,根据你的说法,上面的代码工作正常,除了,即使它还没有发送消息也会显示。 要解决此问题,您可以将 html/jade 文件修改为:

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

    此代码可以让您仅在服务器发送消息时才显示消息。如果消息没有发送,那么message的值将不存在,代码也不会被执行。

    希望对您有所帮助.. 如果没有通过编辑问题提供更多详细信息。

    【讨论】:

    • 您好,谢谢,但不幸的是,即使尚未发送消息,您提供的代码仍会在页面内显示突出显示的区域。我设法以一种不太优雅的方式解决了这个问题,通过将字符串“用户已被占用”放在玉文件的 if 条件中,这样,如果没有发送消息,则不会显示突出显示的区域。谢谢你的回答。
    【解决方案2】:

    不是最好的代码,但它可以工作。

    玉文件:

    -if(message == 'User already taken')
          .alert.alert-danger #{message}
    

    这样如果没有消息发送,页面内部没有高亮区域,只有当玉文件接收到字符串'用户已被占用'时才会显示消息。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-03-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多