当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) { }