嗨,简要解释一下我的应用: 我有一个用户架构和一个“推文”架构(实际上它是一个'发布'架构,但为了避免与'post'方法混淆,我们称之为“推文架构”。)
用户有很多“推文”,但“推文”只有一个用户(如推特)。在我的推文架构中,我有一个Original_Poster键,它是对创建帖子的用户的id的引用(请参阅下面的架构)。
在更新推文的路线中,我有一个if else语句来确认用户试图更新的推文是否真的是他们的推文。这在使用mongodb / mongoose的本地创建用户时有效,但与使用passport-facebook创建的用户无关。
这是if else语句:
if(req.user._id == post.original_poster){
console.log('nice')
}else{
console.log(req.user._id, post.original_poster);
console.log(typeof req.user._id, typeof post.original_poster)
console.log('wtf')
}
我希望在我的控制台中看到的是: '好'
我实际看到的是:
5a288913fa0d78257fd7b4d3 5a288913fa0d78257fd7b4d3
object object
wtf
显然它们是相同的用户id,类型是相同的(虽然这不重要,因为我使用的是double等于而不是三等于)。
任何人都能解释一下吗?
编辑: 以下是完整的Post.find({})以获取更多信息:
Post.findOne({_id: req.params.id}).then((post)=>{
if(req.user._id == post.original_poster){
console.log('nice')
}else{
console.log(req.user._id, post.original_poster);
console.log(typeof req.user._id, typeof post.original_poster)
console.log('wtf')
}
})
答案 0 :(得分:-1)
想出来,虽然答案对我来说有点奇怪,如果有人能解释为什么会这样,请随时解释
我将if(req.user._id == post.original_poster)
更改为if(String(req.user._id) == post.original_poster)
,现在'nice'正在使用console.logged。虽然这对我来说有点奇怪,因为我使用== double等于而不是===所以不应该考虑比较的东西的类型。
if(String(req.user._id) == post.original_poster){
console.log('nice')
}else{
console.log(req.user._id, post.original_poster);
console.log(typeof req.user._id, typeof post.original_poster)
console.log('wtf')
}