Flash消息需要重定向

时间:2016-08-09 22:34:51

标签: javascript node.js connect-flash

"connect-flash": "^0.1.1",
"cookie-parser": "^1.4.3",
"ejs": "^2.4.2",
"express": "^4.14.0",
"express-session": "^1.13.0",

我写了这篇帖子请求,检查现有的用户名或电子邮件是否存在,如果存在,它会闪烁一条消息,说明用户名或电子邮件已被删除。如果不采取任何措施,它将保存数据并将其放入数据库。我的问题是,为了让我闪现“用户名被取消”或“收到电子邮件”的消息,我必须致电usernameFlash(); res.redirect('/')。这需要我重定向回主页,其目的不是告诉用户他们的电子邮件或用户名是否被采用。如何在不调用此方案中的重定向的情况下闪烁消息。

app.post('/signup', function(req, res) {

function usernameFlash(){
  req.flash('messages', 'That username is taken.');
}

function emailFlash(){
  req.flash('messages', 'That email is taken.');
}


var userDetails = User({
    firstname: req.body.firstname,
    username: req.body.username,
    email: req.body.email,
    password: bcrypt.hashSync(req.body.password1, bcrypt.genSaltSync(10))
});

User.findOne({
    $or: [ { 'username': req.body.username}, {'email': req.body.email}]
}, function(err, user) {
    if (user) {
        if(user.username === req.body.username){
          usernameFlash();
          res.redirect('/')
        } else {
        }
        if(user.email === req.body.email){
          emailFlash();
          res.redirect('/')
        } else {
        }
    } else {
      userDetails.save(function(err) {
        if (err) throw err;
      });
      res.redirect('/');
      console.log('change to login')
    }
    if (err) {
        return done(err);
    }
});

});

1 个答案:

答案 0 :(得分:0)

您可以将Flash消息发送到一个特定页面,如下所示:

res.render("/user/login", { messages: req.flash("info", "That email is taken") } );

所以在您的情况下,如果您当前的页面是" / login" ,您应该将响应发送到同一页面,您将看到该消息,如果您想保留表单数据,您可以发回这样的表单数据:

res.render("/user/login", { email: req.body.email, messages: req.flash("info", "That email is taken") } );

然后在模板中使用变量电子邮件。