错误[ERR_HTTP_HEADERS_SENT]:将标头发送到客户端后无法设置标头-Express + Request

时间:2019-04-14 09:13:56

标签: node.js express

我知道这是一个非常基本的问题,但是我发现自己花了太多时间来理解为什么会这样。

下面是我使用npm request lib查询api的api,并使用快速响应发送响应。当我碰到这个时,我得到:

var animals = ['dog', 'cat'];

animals.reverse()[0]
"cat"

animals.reverse()[0]
"dog"

animals.reverse()[1]
"dog"

animals.reverse()[1]
"cat"

下面是编写的代码。

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:\Users\GayathriGanesan\Documents\sampleNode\node_modules\express\lib\response.js:767:10)
    at ServerResponse.send (C:\Users\GayathriGanesan\Documents\sampleNode\node_modules\express\lib\response.js:170:12)
    at ServerResponse.json (C:\Users\GayathriGanesan\Documents\sampleNode\node_modules\express\lib\response.js:267:15)
    at Request._callback (C:\Users\GayathriGanesan\Documents\sampleNode\app.js:80:34)
    at Request.self.callback (C:\Users\GayathriGanesan\Documents\sampleNode\node_modules\request\request.js:185:22)
    at Request.emit (events.js:189:13)
    at Request.<anonymous> (C:\Users\GayathriGanesan\Documents\sampleNode\node_modules\request\request.js:1161:10)
    at Request.emit (events.js:189:13)
    at IncomingMessage.<anonymous> (C:\Users\GayathriGanesan\Documents\sampleNode\node_modules\request\request.js:1083:12)

请帮助您理解原因。我可以以某种方式猜测回调发生了两次。但不确定如何。

1 个答案:

答案 0 :(得分:0)

问题是res.sendStatus设置给定的响应HTTP状态代码,并将其字符串表示形式发送为响应正文(请参见documentation)。 res.json将设置内容类型响应标头,但在该时间响应已被发送到客户端。

因此,不必使用res.sendStatus,而只需使用res.status

response.status(201).json(JSON.parse(body));