【发布时间】:2020-11-01 12:12:01
【问题描述】:
您好,我正在使用中间件进行用户验证任务来验证用户是否存在,这是我的代码:
我有一个这样定义的端点:
app.get("/login/", verifyUser, userController.login);
这是我的中间件 verifyUser:
function verifyUser(req, res, next) {
console.log("Midd 1:", req.query);
let userInfo = userController.findUserOne(req, res);
console.log("userInfo:" + userInfo);
next();
}
这是我的控制器方法:
exports.findUserOne = function (req, res) {
(async () => {
try {
var query = db
.collection("users")
.where("user", "==", req.query.user)
.where("password", "==", req.query.password);
query.get().then(function (querySnapshot) {
if (querySnapshot.size > 0) {
const accessToken = generateAccessToken({ name: req.query.user });
res.json({ accessToken: accessToken });
} else {
return res.status(500).send("User doesn't exist:");
}
});
} catch {
return res.status(500).send(error);
}
})();
};
调用登录端点后,我收到下一条错误消息:
(node:12468) UnhandledPromiseRejectionWarning: Error [ERR_HTTP_HEADERS_SENT]: Cannot set headers after they are sent to the client
at ServerResponse.setHeader (_http_outgoing.js:485:11)
at ServerResponse.header (C:\Tools\Node\From Github\NodeAndReact-FullStack\server\node_modules\express\lib\response.js:771:10)
at ServerResponse.send (C:\Tools\Node\From Github\NodeAndReact-FullStack\server\node_modules\express\lib\response.js:170:12)
at ServerResponse.json (C:\Tools\Node\From Github\NodeAndReact-FullStack\server\node_modules\express\lib\response.js:267:15)
at C:\Tools\Node\From Github\NodeAndReact-FullStack\server\controllers\users\userController.js:54:15
at processTicksAndRejections (internal/process/task_queues.js:93:5)
(node:12468) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). (rejection id: 1)
(node:12468) [DEP0018] DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero exit code.
我正在通过 try, catch 处理控制器中的异步块,但根据外观,问题似乎与此有关。事实上,我不太确定这是否是实现此验证的最佳方式,或者我遇到了与异步代码相关的问题。
【问题讨论】:
标签: node.js async-await middleware