在使用NodeJ的中间件中,无法在我的数据库中获得查询结果



我正在尝试获取用于对用户进行身份验证的查询的异步结果,但我在控制台或变量中没有得到任何东西,事实上,我不太确定是否可以从中间件返回一些东西。这是我的代码:

终点:

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." });
}
};
};

谢谢!

这实际上不是在查询任何数据:

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

您在这里所做的只是构建一个Query对象,它还没有访问任何数据。您必须对它调用get((才能实际执行查询。

get()返回一个promise,该promise通过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
}

最新更新