当jsonparsing一个空的响应时,Whatwg Fetch失败,我该如何防止它?
我在前端和后端(NodeJS)都使用了Fetch API,这个问题在将响应parsing为json时会遇到很多问题。
response.json()
将返回一个promise,所以我不知道响应的主体是什么,当body是空的时候,JSONparsing将会失败并显示错误:
SyntaxError: Unexpected end of input
所以我的问题是,如何防止parsing响应时,它的空?
谢谢
一旦你有Response
对象,检查标题,看看什么Content-Length
说。 基于此,你可以知道是否有东西要parsing。 但是,也似乎服务器返回一个空的application/json
资源假,因为这不是JSON。
由于response.json()
返回一个Promise,所以你可以用catch
处理这个错误,并返回一个虚拟数据对象。
fetch('url').then(response => { return response.json().catch(err => { console.error(`'${err}' happened, but no big deal!`); return {}; }); }).then(data => { console.log(data); });
更新
如下所述,如果您尝试读取response
两次,您将得到一个错误: TypeError: Already Read
。
作为一种解决方法,您可以clone
原始响应并在克隆的对象上调用json
。
fetch('url').then(response => { const responseCopy = response.clone(); return responseCopy.json().catch(_ => response.text()); }).then(data => { console.log(data); });
为什么你不尝试处理错误
try { body = JSON.parse(body) } catch (err) { }