Неожиданные результаты с оператором if с использованием passport.js [duplicate]

1

Привет, чтобы объяснить мое приложение кратко: у меня есть пользовательская схема и схема "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')
    }
})
  • 0
    console.log(post.original_poster, typeof post.original_poster); console.log(req.user._id,typeof req.user._id) здесь пытается получить typeof чтобы он возвращал object
  • 0
    а вот console.log('req.user._id == req.user._id',req.user._id == req.user._id) из запроса только ваше сравнение вроде (1==1) поэтому он возвращает правда
Показать ещё 3 комментария

1 ответ

-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')
            }
  • 0
    Кто бы это ни отрицал, вы можете объяснить, почему вы это сделали, таким образом я могу скорректировать свой ответ.
  • 0
    1. Это на самом деле не отвечает на ваш вопрос, это должно быть обновление редактирования вашего вопроса. И вы это знаете, иначе вы бы не попросили объяснить свой ответ. 2. Ваш вопрос является дубликатом и должен быть закрыт.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню