Mongoose User.findOne 既不返回错误也不返回成功

Posted

技术标签:

【中文标题】Mongoose User.findOne 既不返回错误也不返回成功【英文标题】:Mongoose User.findOne neither return error nor success 【发布时间】:2018-07-01 04:24:55 【问题描述】:

在 passport-facebook 策略中,当我使用 Mongoose User.findOne() 进行查询时,它不会返回错误或成功对象。 Nodejs 来到这个块时,转义这个块 User.findOne()... 而不给出任何错误和成功,即静默转义。

passport.use(new FacebookStrategy(
        clientID: config.get('facebook.clientID'),
        clientSecret: config.get('facebook.clientSecret'),
        callbackURL: config.get('facebook.callbackURL'),
        passReqToCallback: true,
        profileFields: ['id', 'email', 'first_name', 'last_name']
    ,
    function(req, accessToken, refreshToken, profile, done) 
        // check if the user is already logged in
        let fbInfo = profile._json;
        // console.log(fbInfo);

        if (!req.user) 
            User.findOne( 'email': fbInfo.email , function(err, user) 
                if (err)
                    return done(err);

                if (user) 

【问题讨论】:

这不是转义,您的电子邮件在任何文档中都不匹配,它返回 null。如果并查看结果,您能否首先添加console.log(err,user)? User.findOne( 'email': fbInfo.email , function(err, user) console.log(err,user); 这个 console.log 没有执行 你能检查req.user的值吗?我认为您的条件不满意,请按req.user 而不是!req.user @TareqAhamed 检查我的答案,看看它是否能解决您的问题。如果它解决了您的问题,请将其标记为正确并点赞。如果您有任何问题,请在我的回答下发表评论。 抱歉 Codearts,它不工作 【参考方案1】:

我认为您没有在 if 语句中使用它。 将if (!req.user) 更改为if (req.user),它应该可以工作。

--

不过这里有一些使用 Passport Facebook 身份验证策略的示例代码:

passport.use(new FacebookStrategy(
    clientID: oauth.facebook.clientID,
    clientSecret: oauth.facebook.clientSecret,
    callbackURL: oauth.facebook.callbackURL,
    // passReqToCallback: true,
    profileFields: ['id', 'emails', 'name']
,
function (accessToken, refreshToken, profile, done) 
      process.nextTick(function () 
        User.findOne(
          $or: [
             'facebook.id': profile.id ,
             'email': profile.emails[0].value 
          ]
        , function (err, user) 
          if (err) 
            return done(err)
          

          if (user) 
            if (user.facebook.id == undefined) 
              user.facebook.id = profile.id
              user.facebook.token = accessToken
              user.facebook.email = profile.emails[0].value
              user.facebook.name = profile.name.givenName + ' ' + profile.name.familyName
              user.save()
            

            return done(null, user)
           else 
            let newUser = new User()
            ...

            newUser.save(err => 
              if (err) 
                console.log(err)
                throw err
              

              return done(null, newUser)
            )
          
        )
      )
    
  ))

【讨论】:

以上是关于Mongoose User.findOne 既不返回错误也不返回成功的主要内容,如果未能解决你的问题,请参考以下文章

mongoose 各种执行

如何使用 Mongoose 进行查询,然后拿该文档做其他事情?

使用 Mongoose 从 MongoDB 文档中删除一个键

Mongoose save() 方法不写入数据库

如何使用 mongoose 在 MongoDB 数组中推送数据

Mongoose 对 promise 拒绝处理