mongoose 对象参数错误:findOne()的参数“filter”必须是一个对象,已获取

yx2lnoni  于 2022-11-24  发布在  Go
关注(0)|答案(1)|浏览(227)

我试着把登录页面和mongoose连接起来。不幸的是它不起作用。我得到错误:

ObjectParameterError: Parameter "filter" to findOne() must be an object, got 637798b57bfa9d5fbede9c30

我试图找到解决方案的一整天,但我可以t figure it out. I m也仍然学习编码和斗争,以了解它的一切,但大多数我明白。
第一个
我认为问题就出在这里的某个地方:

passport.use(new LocalStrategy({ usernameField: 'email' }, authenticateUser))
  passport.serializeUser((User, done) => done(null, User._id))
  passport.deserializeUser(function(_id, done) {
    User.findOne(_id, function (err, User) {
      done(err, User);
    });
  });

但我不确定...
非常感谢你的帮助。

2uluyalo

2uluyalo1#

您正在混合使用findOne和findById
findById不需要对象而是_id.正如docs(还有方法名)解释的那样,在钩子下它通过id找到,所以就像做findOne({_id: id})一样。
从文档中:
findById(id)几乎 * 等价于findOne({ _id: id })
因此,问题在于,当方法期望对象与过滤器匹配时,您试图简单地使用_id
因此,您可以使用User.findOne({_id: _id})User.findById(_id)

相关问题