【问题标题】:NodeJS request module - body on http.IncomingMessage?NodeJS 请求模块 - http.IncomingMessage 上的正文?
【发布时间】:2016-04-29 22:11:36
【问题描述】:

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

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

【问题讨论】:

  • 是的,为什么不试试看会发生什么?
  • 我只是好奇为什么文档没有提供这些信息。他们能保证我收到每种请求的正文吗?还是只是巧合?
  • 很公平,它真的只是一个方便的方法,所以我们不必做response.body,request会为每个有body要返回的请求返回一个body...body可以是也是一个错误,响应只是一个从 api 返回的对象,请求只是让这样做变得容易

标签: javascript node.js node-request


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    是的,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。传递给响应 eventresponse 对象是标准的 http.IncomingMessage,因此没有 body 属性。

    【讨论】:

      猜你喜欢
      • 2015-09-09
      • 1970-01-01
      • 1970-01-01
      • 2018-06-16
      • 2017-10-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-06-30
      相关资源
      最近更新 更多