Привет, чтобы объяснить мое приложение кратко: у меня есть пользовательская схема и схема "Tweet" (на самом деле это "схема сообщений", но чтобы избежать путаницы с методом "post", назовите ее "Схемой Tweet").
У пользователя много "твитов", но "твит" имеет только одного пользователя (например, твиттер). В моей схеме твита у меня есть ключ Original_Poster, который является ссылкой на идентификатор пользователя, создавшего сообщение (см. Ниже схему).
На пути к обновлению твита у меня есть оператор if else, чтобы подтвердить, что твит, который пытается обновить пользователь, на самом деле является их чириканье. Это работает при использовании локально созданных пользователей с mongodb/mongoose, но не с пользователями, созданными через паспорт-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')
}
То, что я ожидаю увидеть, находится в моей консоли: "nice"
То, что я на самом деле вижу, это:
5a288913fa0d78257fd7b4d3 5a288913fa0d78257fd7b4d3
object object
wtf
Очевидно, что они являются одинаковыми идентификаторами пользователей, и тип один и тот же (хотя это не имеет значения, поскольку я использую 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')
}
})
Выяснил это, хотя ответ немного странный для меня, если кто-нибудь может объяснить, почему это работает, пожалуйста, объясните ниже
Я изменил 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')
}
console.log(post.original_poster, typeof post.original_poster); console.log(req.user._id,typeof req.user._id)
здесь пытается получитьtypeof
чтобы он возвращалobject
console.log('req.user._id == req.user._id',req.user._id == req.user._id)
из запроса только ваше сравнение вроде(1==1)
поэтому он возвращает правда