post 请求中 req.flash 的问题

Issues with req.flash within a post request

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

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('/');
});

如果req定义在更高层次,在其他函数中调用req应该没有问题。我不确定你的 flash 是否是会话存储的,如果不是,那么消息不是 flash 的原因是你重定向到路由。

您没有等到数据库请求结束就重定向到根目录。我认为您只会在找到用户时重定向?包括您对回调函数的重定向。