NodeJS请求模块-http上的body.IncomingMessage

NodeJS request module - body on http.IncomingMessage?

本文关键字:body IncomingMessage 上的 -http 请求 模块 NodeJS      更新时间:2023-09-26

我正在研究节点的请求模块,文档中说回调接受三个参数——errorresponsehttp.IncomingMessage)和body

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

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

为了向后兼容,不支持响应压缩违约要接受gzip压缩响应,请将gzip选项设置为是的。请注意,通过请求传递的主体数据是自动的在响应对象未修改且将包含压缩数据,如果服务器发送了压缩响应。

是的,body只是response.body的一个便利,因此它们保证始终相同。

您可以通过检查源代码来验证这一点。

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

并且在同一文件中的其他地方处理CCD_ 14事件

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

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