我正在查看节点的request模块,文档说回调接受三个参数 - error
,response
(http.IncomingMessage
)和body
。
在提出请求时,我发现该身体也可以作为response
对象的属性使用
这可靠吗?我可以在回调中省略最后一个参数并使用response.body
吗?
答案 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
属性。