我知道这是一个非常基本的问题,但是我发现自己花了太多时间来理解为什么会这样。
下面是我使用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)
请帮助您理解原因。我可以以某种方式猜测回调发生了两次。但不确定如何。
答案 0 :(得分:0)
问题是res.sendStatus
设置给定的响应HTTP状态代码,并将其字符串表示形式发送为响应正文(请参见documentation)。 res.json
将设置内容类型响应标头,但在该时间响应已被发送到客户端。
因此,不必使用res.sendStatus
,而只需使用res.status
:
response.status(201).json(JSON.parse(body));