Node.js 获取不同步的服务器响应

Node.js 获取不同步的服务器响应,node.js,express,mongoose,passport.js,Node.js,Express,Mongoose,Passport.js,在一个用户成功注册后,我现在看到一个大部分是空的页面,其中的文本未定义。正在重定向到顶部的/app 更新:我还应该提到,在提交表格后,我被重定向到/users。我看到了上面提到的文本 我认为这是因为req.redirect调用在user.save回调中,但我不确定修复方法是什么 我用猫鼬做ORM var User = require('../models/user'); module.exports = function(app) { app.post('/users', functio

在一个用户成功注册后,我现在看到一个大部分是空的页面,其中的文本
未定义。正在重定向到顶部的/app

更新:我还应该提到,在提交表格后,我被重定向到/users。我看到了上面提到的文本

我认为这是因为req.redirect调用在user.save回调中,但我不确定修复方法是什么

我用猫鼬做ORM

var User = require('../models/user');

module.exports = function(app) {

  app.post('/users', function(req, res, next) {
    var user = new User({
      email:      req.body.email,
      password:   req.body.password
    });

    user.save(function(err) {
      if (err)
        res.send(412, {message: err});
      else
        req.login(user, function(err) {
          if (err !== undefined) return next(err);
          res.redirect('/app', {
            email: user.email,
            id:    user._id
          });
        });
    });

  });
};

结果表明,req.login调用必须包含在password.authenticate回调中。网站上的人遗漏了这一部分

user.save(function(err) {
  if (err)
    res.send(412, {message: err});
  else
    passport.authenticate('local', function(err, user) {
      if (err) { return next(err) }
      if (!user) { return res.redirect('/login') }
      req.login(user, function(err) {
        if (err) { return next(err); }
        return res.redirect('/app', { email:user.email, id:user._id });
      });
    })(req, res, next);
});