在nodejs(10.15)/ express(4.16)项目中设置res.header后,以下路由器功能会导致错误:
router.get("/active", [auth_deviceid, auth_userinfo, auth_role(['admin', 'eventer', 'messanger'])], async (req, res) => {
try {
let events = await Event.findAll({where: {status : "active", fort_token: req.user.fort_token}, attributes: {exclude: ['fort_token']}
}); //<<==successful
return res.status(200).send(events); //<<==line 97 throws error
} catch (err) {
console.log("error in event/active : ", err);
return res.status(400).send(err); //<<==Here is the return executed
};
});
return res.status(200)
引发错误:
error in event/active : Error [ERR_HTTP_HEADERS_SENT]: Cannot set headers after they are sent to the client
at ServerResponse.setHeader (_http_outgoing.js:470:11)
at ServerResponse.header (C:\d\code\js\emps_bbone\node_modules\express\lib\response.js:767:10)
at ServerResponse.send (C:\d\code\js\emps_bbone\node_modules\express\lib\response.js:170:12)
at ServerResponse.json (C:\d\code\js\emps_bbone\node_modules\express\lib\response.js:267:15)
at ServerResponse.send (C:\d\code\js\emps_bbone\node_modules\express\lib\response.js:158:21)
at router.get (C:\d\code\js\emps_bbone\routes\events.js:97:32)
在中间件auth_userinfo
中设置了2个标头:
res.header({"x-auth-token" : token, "x-auth-secret" : secret });
next();
我相信router.get
返回查询结果时,中间件中的标头集会导致错误。有一个关于错误的post。但是我无法在我的代码中解决该问题。