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 从 MongoDB 文档中删除一个键