NodeJS Express: как получить предмет - PullRequest
0 голосов
/ 18 января 2020

Я пытаюсь создать простую форму для входа и не могу подтвердить пароль от MongoDB.

Сначала я создаю маршрут .post для проверки формы, а затем получаю данные MongoDB, которые я хочу сравнить с формой.

Вот мой код:

app.post('/users', (req, res) => {
  const reqUser = req.body.params.name
  const reqPW = req.body.params.password

  // connect to mongoDB
  const collection = client.db().collection("users")
  collection.find({name: reqUser}).toArray(function (err, results) {
    if (err) {
      console.log(err)
      res.send([])
      return
    }
    else {
      console.log('RESULT', results) // returns the object
      console.log('RES PW', results.password) // returns undefined

      // this does not work
      Object.keys(results).forEach(function(key) {
        console.log('key is: ', key); // returns 0
      });

      // validate user+pw
      if (!reqUser || !reqPW/*|| reqPW !== password*/) {
        return res.status(401).end()
      }

      // send result to frontend
      res.send(results)
      res.end
    }
  })
})

Итак, мой объект возвращается в results, но я не могу получить данные из объекта. Я также попытался преобразовать его в массив с Array.from(), но это тоже не сработало.

Обратите внимание, что я еще не реализовал хеширование и соляцию паролей, так как думал, что хочу работающую проверку первый. Нужно ли реализовывать это в первую очередь?

1 Ответ

2 голосов
/ 18 января 2020

Я только что проверил do c:

Метод toArray () возвращает массив, содержащий все документы из курсора. Метод полностью выполняет итерацию курсора, загружая все документы в оперативную память и исчерпывая курсор.

Таким образом, toArray() вернет массив , а не объект, поэтому ваши результаты будут массив, содержащий все элементы (объект), которые вы получаете из БД. Если вы console.log(results), он должен печатать массив, а не объект.

Предполагая, что не будет двух пользователей с одинаковыми именами, вы получите только массив, содержащий один объект, поэтому вы можете просто сделать:

results[0].password // get the first object's password field

Не уверен, что если это ответ на ваш вопрос, но на основе вашего кода я нашел в нем проблему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...