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