<p>axios 不应该抛出有效的 HTTP 响应</p>

创建于 2016-10-09  ·  3评论  ·  资料来源: axios/axios

为什么 axios 会抛出status < 200 || status >= 300 ? 见defaults.js#L84
HTTP 错误 500 意味着我们到达了服务器,甚至使用 http 协议得到了有效的响应。

从应用程序的角度来看,HTTP 错误 500 可能被视为异常,但这是在不同的抽象级别,并且与 HTTP 抽象完全无关。

为了与即将到来的 fetch 规范前向兼容,我认为重要的是 axios 不会在 HTTP 响应有效的情况下抛出。

fetch 规范指定了一个response.ok属性,以便应用程序开发人员可以轻松识别 HTTP 操作的结果,我相信类似的方法可能对 axios 有用。

有关获取规范的更多详细信息,请参见此处:
https://fetch.spec.whatwg.org/#dom -response-ok
https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API/Using_Fetch

最有用的评论

正确,但我的意思是这不应该是默认值。 事实上,这甚至不应该是可配置的。

所有3条评论

我认为您可以使用 validateStatus 配置选项在有服务器响应时始终解决。 来自文档:

// `validateStatus` defines whether to resolve or reject the promise for a given
// HTTP response status code. If `validateStatus` returns `true` (or is set to `null`
// or `undefined`), the promise will be resolved; otherwise, the promise will be
// rejected.
validateStatus: function (status) {
  return status >= 200 && status < 300; // default
}

正确,但我的意思是这不应该是默认值。 事实上,这甚至不应该是可配置的。

我们理解您的担忧,但 Axios 并不意味着要取代fetch也不是模仿它的行为。 我们甚至不使用它作为适配器来拨打电话(我们暂时坚持使用 XHR)。

Axios 尝试尽可能地可配置,提供大多数人将使用的默认值。 在这种情况下,人们倾向于在服务器响应后立即验证状态码。 例如:

fetch(url).then(verifyStatus).then(...);

这就是存在fetch-check-http-status 之类的软件包的原因。

我们希望避免这种频繁重复的结构。 如果您想使用来自服务器的任何有效响应进行解析,您始终可以设置validateStatus: false

此页面是否有帮助?
0 / 5 - 0 等级

相关问题

emaincourt picture emaincourt  ·  3评论

altruisticsoftware picture altruisticsoftware  ·  3评论

c0debreaker picture c0debreaker  ·  3评论

Adman picture Adman  ·  3评论

samayo picture samayo  ·  3评论