【发布时间】:2019-10-27 19:11:52
【问题描述】:
我尝试使用函数:
exports.get = async function (req, res, next) {
filter.validateId(req,res,next);
const db = req.app.get('db');
let id = req.params.id;
let user;
try {
user = await db.models.user.findByPk(id);
} catch (err) {
res.send(400)
}
res.json(user);
};
和导出函数:
var validateId = function (req, res, next) {
let id = parseInt(req.params.id);
if (isNaN(id) || id <= 0) {
res.send(400);
}
res.locals.id = id;
return next();
};
exports.validateId=validateId;
但我得到了错误:
GET /users/203 404 17.862 毫秒 - 90
(node:20775) UnhandledPromiseRejectionWarning: 错误 [ERR_HTTP_HEADERS_SENT]: 发送到客户端后无法设置标头 在 ServerResponse.setHeader (_http_outgoing.js:470:11) 在 ServerResponse.header (/home/qt/dev/BigDealExpressJSTest/node_modules/express/lib/response.js:767:10) 在 ServerResponse.send (/home/qt/dev/BigDealExpressJSTest/node_modules/express/lib/response.js:170:12) 在 ServerResponse.json (/home/qt/dev/BigDealExpressJSTest/node_modules/express/lib/response.js:267:15) 在exports.get (/home/qt/dev/BigDealExpressJSTest/controllers/userController.js:28:7) (节点:20775)UnhandledPromiseRejectionWarning:未处理的承诺拒绝。此错误源于在没有 catch 块的情况下抛出异步函数内部,或拒绝未使用 .catch() 处理的承诺。 (拒绝编号:1) (节点:20775)[DEP0018] DeprecationWarning:不推荐使用未处理的承诺拒绝。将来,未处理的 Promise 拒绝将使用非零退出代码终止 Node.js 进程。
【问题讨论】:
-
错误
Cannot set headers after they are sent是因为您发送了两次响应,可能是先在validateId上,然后是res.json(user) -
好的,我修复 if,但现在我收到错误
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:21582) [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.
标签: node.js express promise es6-promise