设置导致ERR_HTTP_HEADERS_SENT的res标头

时间:2019-05-23 09:52:16

标签: node.js express

在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。但是我无法在我的代码中解决该问题。

0 个答案:

没有答案