我有一个页面,该页面使用fetch()将请求发送到API服务器。服务器位于不同的地址,并且经常存在一些网络问题。为了帮助用户更快地解决此类问题,我希望收到有关引起问题的尽可能多的信息。我已经搜索了很多,没有任何运气。对于所有网络失败请求,我所拥有的只是消息“无法提取”,该消息什么也没有。
我已阅读有关在MDN上处理失败请求的信息:https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API/Using_Fetch 在哪里写以下内容:
当遇到网络错误或在服务器端错误配置CORS时,fetch()承诺将拒绝TypeError,尽管这通常意味着权限问题或类似问题,例如404并不构成网络错误。
换句话说-在错误“无法提取”下可能存在另一种错误。 是否有可能以某种方式获取失败的实际原因?
如果另一个接口提供有关失败请求的更多信息,我什至同意使用另一个接口而不是fetch()进行请求。
答案 0 :(得分:1)
换句话说-在错误“无法提取”下可能存在另一种错误。是否有可能以某种方式获取失败的实际原因?
如果是fetch
本身的拒绝,则它是三种错误之一:
AbortError
,因为请求被中止了您可以找到详细信息here。除了拒绝原因类型为Error
(TypeError
,AbortError
等)之外,不太可能有很多可用信息
如果这是HTTP错误,则fetch
不会拒绝诺言,而是使用一个ok
属性为false
的Response对象来实现并且其status
属性将提供HTTP状态代码(404或类似名称)。您还可以读取错误响应的正文(使用text()
方法,如果服务器发回带有错误的JSON文本,则使用json()
,等等)。
因此,您至少可以区分中止的请求,网络错误和HTTP错误,而使用HTTP错误,则可以区分是什么类型(404、500等)和服务器可以区分的类型(如果配置为)向您发送有关响应正文中错误的更多信息。