Проблемы с получением информации о переменных на стороне сервера из базы данных MongoDB с использованием NodeJS с методом findOne () - PullRequest
0 голосов
/ 15 апреля 2020

Извините, если оказалось, что я упустил что-то действительно очевидное, но у меня некоторое время возникали проблемы с этим кодом, и я просто не понимаю его. В настоящее время я пытаюсь работать над аутентификацией. Система для приложения, которое я разрабатываю для школы, и для этого я делаю конечную точку API, которая берет введенный пароль, хэширует его, затем сравнивает его с сохраненным хешированным паролем, чтобы увидеть, совпадают ли эти два. Мой текущий код выглядит так this:

router.route('/auth/').post((req, res) => {
    const userName = req.body.userName;
    const password = User.generateHash(req.body.password);

    let query = User.findOne({"userName": userName},{_id:0, userType:0, fName:0, lName:0, password:1, email:0, userName:0, __v:0});
    let serverpass = query.get("password");

    if (serverpass == password) {
        res.status(200).json("User Authenticated!");
    } else {
        res.status(400).json("Passwords do not match." + password + " " + serverpass)
    }

})

Основываясь на том, что я прочитал, метод findOne () возвращает необъяснимый документ, который вы можете получить значения с помощью метода .get (). Однако всякий раз, когда я его тестирую при использовании клиента REST переменная serverpass всегда возвращается как объект типа Object, а метод get () всегда возвращает undefined. Любая помощь по этому вопросу будет принята. Для справки, вот запись базы данных, которую я пытаюсь прочитать:

  {
    "_id": *REDACTED*,
    "userType": "AuthTest",
    "fName": "Auth",
    "lName": "Test",
    "password": *REDACTED*,
    "email": "new@new.com",
    "userName": "AuthTest",
    "__v": 0
  },

, где пароль является просто хэшем "password". Предоставляемая информация для клиента REST:

* 100 8 *

Спасибо!

1 Ответ

0 голосов
/ 15 апреля 2020

Запросы MongoDB являются асинхронными, это означает, что вам нужно обработать относительное Обещание . Этого легко достичь с помощью asyn c / , ожидающих операторов.

router.route('your-path').post(async (req, res) => {
   // Get your parameters...

   try {
      const user = await User.findOne(...);

      // TODO: implement your business logic...
   } catch (e) {
      // TODO: error handling...
   }
});
...