node.js - 不同步服务器响应

标签 node.js express mongoose passport.js

在成功注册用户后,我当前看到的页面大部分是空的,其中包含文本 undefined。重定向到顶部的/app

更新:我还应该提到,在提交表单后,我被重定向到/users。所以在/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
          });
        });
    });

  });
};

最佳答案

事实证明,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);
});

关于node.js - 不同步服务器响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18304590/

相关文章:

express - 在 Express.js 中设置默认 View 路径

mongodb - 如何查看 Mongoose 发出的实际 Mongo 调用?

node.js - Mongoose 类型错误 : Cannot use 'in' operator to search for '_id' in [object Object]

javascript - 使用 Sinon.js stub 类方法

javascript - 上传多个文件时出现异步问题

node.js - AWS SAM 两个域映射到单个函数

node.js - 如何防止javascript中的内存泄漏

node.js - 使用 Express 提供 node_module 服务

javascript - NodeJS 5 中未定义 Harmony 集合

node.js - mongoose findByIdAndUpdate 仅更新文档中的一个字段