generateJWT 不是函数

generateJWT is not a function

我正在尝试使 facebook 登录成为可能:

这是我的 API 路线:

router.post('/registerFb', function(req, res, next){
  User.find({ 'username': req.body.username}, function(err, foundUser){
    if(err)
      return next(err);

    var co = Object.keys(foundUser).length;

    if (co === 0)
    {
      var user = new User();

      user.username = req.body.username;
      user.firstname = "firstname";
      user.lastname = "lastname";
      user.difficulty = "easy";
      user.isstudent = false;
      user.haschildren = false;
      user.gender = "male";
      user.isdoingchallenges =  false;
      user.facebookid = req.body.facebookid;

      user.save(function (err){
        if(err){ return next(err); }

        return res.json({token: user.generateJWT()});
      });
    }else{
      return res.json({token: foundUser.generateJWT()});
    }
  });
});

当用户第一次使用 facebook 登录时,将存储用户并使用 jsonwebtoken 生成令牌。

然而,当已经有来自该 fb 帐户的用户时,它给我错误:

TypeError: foundUser.generateJWT is not a function

为什么会这样? generateJWT 对新用户有效但对找到的用户无效?

我将 API 路线编辑为:

if (co === 0)
    {
      var user = new User();

      user.username = req.body.username;
      user.firstname = "firstname";
      user.lastname = "lastname";
      user.difficulty = "easy";
      user.isstudent = false;
      user.haschildren = false;
      user.gender = "male";
      user.isdoingchallenges =  false;
      user.facebookid = req.body.facebookid;

      user.save(function (err){
        if(err){ return next(err); }

        return res.json({token: user.generateJWT()});
      });
    }else{
      var user = new User();
      user._id = foundUser._id;
      user.username = foundUser.username;
      return res.json({token: user.generateJWT()});
    }

在 postman 中使用时,它 returns 像预期的标记。

但是当我在生产模式下使用它时,出现 500 内部服务器错误。

userUser 的一个实例,而 foundUser 是一个对象 return 通过 User.find 方法编辑。

您可能需要将 find 方法修改为 User 的 return 实例,或者如果它是数据库 (mongo?) 处理程序,则创建 User 在调用 generateJWT 方法之前的回调中。