Не удалось получить результат запроса в моей базе данных в промежуточном программном обеспечении с NodeJs - PullRequest
0 голосов
/ 14 июля 2020

Я пытаюсь получить результат asyn c запроса для аутентификации пользователей, но я ничего не получаю в своей консоли или в переменной, на самом деле я не совсем уверен, могу ли я что-то вернуть из промежуточного программного обеспечения. Это мой код:

Конечная точка:

app.get("/login/", verifyUser, userController.login);

Промежуточное ПО:

function verifyUser(req, res, next) {
  let user = userController.findUserOne;
  next();
}

И метод findUser в моем контроллере:

exports.findUserOne = function (req, res) {
  const auth = async (req, res, next) => {
    try {
      const user = await db
        .collection("users")
        .where("user", "==", req.query.user)
        .where("password", "==", req.query.password);
      if (!user) {
        throw new Error();
      }
      req.user = user;
      next();
    } catch (e) {
      res.status(401).send({ error: "Please authenticate." });
    }
  };
};

Спасибо!

1 Ответ

0 голосов
/ 14 июля 2020

На самом деле это не запрос каких-либо данных:

      const user = await db
        .collection("users")
        .where("user", "==", req.query.user)
        .where("password", "==", req.query.password);

Все, что вы здесь делаете, - это создание объекта Query , который еще не получил доступа к каким-либо данным. Вам нужно будет вызвать на нем get () , чтобы на самом деле выполнить запрос.

get() возвращает обещание, которое разрешается с помощью QuerySnapshot, в котором вам нужно будет покопаться, чтобы увидеть, найден соответствующий документ. Вместо этого ваш код должен выглядеть примерно так:

      const query = db
        .collection("users")
        .where("user", "==", req.query.user)
        .where("password", "==", req.query.password);
      const querySnapshot = await query.get();
      if (querySnapshot.size > 0) {
          // do something with the documents inside
      }
...