NodeJS请求模块 - http.IncomingMessage上的正文?

时间:2016-04-29 22:11:36

标签: javascript node.js node-request

我正在查看节点的request模块,文档说回调接受三个参数 - errorresponsehttp.IncomingMessage)和body

在提出请求时,我发现该身体也可以作为response对象的属性使用 这可靠吗?我可以在回调中省略最后一个参数并使用response.body吗?

2 个答案:

答案 0 :(得分:3)

response.body并不总是与body参数相同。如果对响应请求任何处理(例如解压缩),则body参数将是该处理的结果,但response.body可能不会反映该处理。您应该使用response参数。以下是文档中的一个示例:

  

为了向后兼容,不支持响应压缩   默认。要接受gzip压缩的响应,请将gzip选项设置为   真正。请注意,通过请求传递的正文数据是自动的   在响应对象未修改且将包含的情况下解压缩   如果服务器发送压缩响应,则压缩数据。

答案 1 :(得分:0)

是的,body只是response.body的一种方便,因此可以保证它们始终相同。

您可以通过选中the source code进行验证。

self.emit('complete', response, response.body)

和同一文件中的其他地方,complete事件已处理

self.on('error', self.callback.bind())
self.on('complete', self.callback.bind(self, null))

这仅适用于传递给回调的response。传递给响应 event response对象是标准的http.IncomingMessage,因此没有body属性。