post请求中的req.flash问题

时间:2016-08-09 07:53:13

标签: node.js flash express

我检查是否收到了电子邮件或用户名。然后我使用flash然后使用flash向客户端发送消息req.flash('messages', 'That username is taken.');唯一的问题是我无法在函数内调用请求命令。我可以在app.post('/signup', function(req, res) {之后立即发送消息。如何检查用户名是否可用,然后在确定后发送req.flash命令。我尝试创建一个if语句,但因为在找到用户名并且变量设置为true时异步运行节点,所以调用了if语句。如何在此帖子请求中使用req.flash向客户端发送消息。

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

 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){
          console.log('that username is taken');
          req.flash('messages', 'that username is taken');
        } else {

        }
        if(user.email === req.body.email){
          console.log('that email is already in use');
          req.flash('messages', 'that email is already in use');
        } else {

        }
    } else {
      userDetails.save(function(err) {
        if (err) throw err;
      });
      console.log('change to login')
    }
    if (err) {
        return done(err);
    }
});

res.redirect('/');
});

1 个答案:

答案 0 :(得分:1)

如果在更高级别定义req,则在其他函数中调用req应该没有问题。我不确定你的flash是否是会话存储的,如果不存在,那么为什么消息不闪存是你的重定向路由。

您可以重定向到root,而无需等待数据库请求结束。我想如果找到用户,你只会重定向?包括重定向到回调函数。