axiosがstatus < 200 || status >= 300
スローするのはなぜですか? defaults.js#L84を参照してください
HTTPエラー500は、サーバーに到達し、httpプロトコルを使用して有効な応答を取得したことを意味します。
アプリケーションの観点からは、HTTPエラー500は例外と見なされる場合がありますが、これは異なる抽象化レベルであり、HTTP抽象化とはまったく関係ありません。
今後のフェッチ仕様との上位互換性を保つために、有効なHTTP応答の場合にaxiosがスローしないことが重要だと思います。
フェッチ仕様では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
サーバーの応答がある場合は、validateStatusconfigオプションを使用して常に解決できると思います。 ドキュメントから:
// `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
設定できます。
最も参考になるコメント
正解ですが、私のポイントは、これがデフォルトであってはならないということです。 実際、これは構成可能であってはなりません。