【问题标题】:Superagent: Error: Parser is unable to parse the responseSuperagent:错误:解析器无法解析响应
【发布时间】:2023-03-20 07:14:01
【问题描述】:

我在我的 react 应用程序中使用 Superagent,并且我正在调用 IPFS api。具体来说,我正在将文件上传到我的 IPFS 服务器。现在,一切正常,当我上传一个或多个文件时,调用通过并且文件显示在 IPFS 中没有问题。

当我上传多个文件时出现问题,响应似乎以纯文本而不是 JSON 的形式返回,并且 superagent 抛出错误

client.js:399 Uncaught (in promise) Error: Parser is unable to parse the response
    at Request.<anonymous> (client.js:399)
    at Request.Emitter.emit (index.js:133)
    at XMLHttpRequest.xhr.onreadystatechange (client.js:708)

所以要明确一点,上传单个文件时,我会收到一个不错的 JSON 响应,但是当我上传多个文件时,响应是纯文本的。

我可以强制 Superagent 将响应返回给我并自己解析吗?或者我可以在拨打电话时设置一些东西以强制进行 json 解析吗?下面是我的超级代理请求函数

  add : acceptedFiles => {
    const url = ipfs.getUrl("add")
    const req = request.post(url)

    acceptedFiles.forEach(file => req.attach(file.name, file))

    req.then(res => {
      return console.log(res);
    })
  }

【问题讨论】:

  • 你找到这个问题的答案了吗?我也遇到了同样的困难。

标签: json ajax reactjs superagent ipfs


【解决方案1】:

我正在寻找一个更优雅的解决方案,但在我找到它之前,我想提供我自己的解决方案。


我认为这个问题是由错误的响应 Content-Type 设置引起的,但我还没有确认这个观点。

不过,你可以试试这个:

req.catch(function (err) {
    console.log(err.rawResponse)
})

至少,这解决了我的问题。

【讨论】:

    【解决方案2】:

    根据their docs,您可以指定优先于内置解析器的自定义解析器:

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

    我试过了,效果很好。

    superagent.get('....')
        .buffer(true)
        .parse(({ text }) => JSON.parse(text))
        .then(...)
    

    【讨论】:

    • 解析对我有用,非常感谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-16
    • 1970-01-01
    • 1970-01-01
    • 2018-06-19
    • 1970-01-01
    相关资源
    最近更新 更多