Superagent:错误:解析器无法解析响应

时间:2017-10-10 19:41:57

标签: json ajax reactjs superagent ipfs

我在我的反应应用中使用了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);
    })
  }

2 个答案:

答案 0 :(得分:1)

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


我认为此问题是由错误的响应Content-Type设置引起的,但我尚未确认这一观点。

但是,您可以尝试以下操作:

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

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

答案 1 :(得分:0)

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

  

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

我尝试了,对我来说效果很好。

.buffer(false)