不同步服务器响应

时间:2013-08-18 23:19:10

标签: node.js express mongoose passport.js

在成功注册用户后,我目前看到的是一个空白页面,文字undefined. Redirecting to /app位于顶部。

更新:我还应该提一下,在表单提交后,我被重定向到/ users。所以on / users我看到了上面提到的文字。

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

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

  });
};

1 个答案:

答案 0 :(得分:2)

事实证明,req.login调用必须包含在password.authenticate回调中。网站上的example将该部分遗漏了。

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);
});