【问题标题】:node-superagent responseType('blob') vs. buffer(true)node-superagent responseType('blob') vs. buffer(true)
【发布时间】:2020-06-04 17:10:07
【问题描述】:

由于 request 的弃用,我们目前正在使用 superagent 在我们的节点应用程序中重写请求服务。到目前为止一切看起来都很好,但是我们不太确定如何请求二进制数据/八位字节流并将实际响应主体处理为Buffer。根据docs(在客户端)应该使用

superAgentRequest.responseType('blob');

这似乎在 NodeJS 上运行良好,但我也发现了这个 github issue 他们使用的地方

superAgentRequest.buffer(true);

同样有效。所以我想知道在 NodeJS 中请求二进制数据的首选方法是什么?

【问题讨论】:

    标签: node.js superagent


    【解决方案1】:

    根据 superagent 的 source-code, 使用 responseType() 方法在内部将 buffer 标志设置为 true,即与手动将其设置为 true 相同。

    在处理二进制数据/八位字节流的情况下,使用binary data parser,实际上只是simple buffer

    module.exports = (res, fn) => {
      const data = []; // Binary data needs binary storage
    
      res.on('data', chunk => {
        data.push(chunk);
      });
      res.on('end', () => {
        fn(null, Buffer.concat(data));
      });
    };
    

    在这两种情况下都使用了这个解析器,它解释了行为。因此,您可以使用上述任何一种方法来处理二进制数据/八位字节流。

    【讨论】:

      【解决方案2】:

      根据文档https://visionmedia.github.io/superagent/

      SuperAgent 将为您解析已知的响应体数据,目前支持 application/x-www-form-urlencodedapplication/jsonmultipart/表单数据。您也可以为其他响应正文数据设置自动解析:

      您可以使用 .buffer(true).parse(fn) 方法设置自定义解析器(优先于内置解析器)。如果未启用响应缓冲 (.buffer(false)),则将发出响应事件而无需等待正文解析器完成,因此 response.body 将不可用。

      所以要解析其他响应类型,您需要设置.buffer(true).parse(fn)。但是如果您不想解析响应,则无需设置buffer(true)

      【讨论】:

      • 感谢您的输入 - 所以如果我只想将(完整)响应体作为二进制缓冲区处理,我实际上不需要在 Node 中做任何事情?
      • 当然,如果您想将 response-body 处理为二进制,那么您需要将响应类型设置为 blob,就像您在选项 1 中所做的那样。在此处查看“解析响应正文”主题:@ 987654322@,superagent 在内部处理这些 application/x-www-form-urlencoded、application/json 和 multipart/form-data 响应类型。但是,如果您想处理二进制等其他响应类型,那么这里有一个单独的方法:responseType('blob')。据我了解,内部 Superagent 以这种方式处理:buffer(true).parse(fn)。希望这会有所帮助
      • 虽然这仍然不能回答我的问题......文档说将其设置为 blob 仅对网络是必需的。正如我所说,使用 buffer(true) 效果很好。我想我必须检查实现才能找到答案:)
      猜你喜欢
      • 2020-07-06
      • 2020-07-19
      • 2021-04-12
      • 2021-09-17
      • 2018-08-25
      • 1970-01-01
      • 2013-05-26
      • 2020-06-12
      • 1970-01-01
      相关资源
      最近更新 更多