Mengapa axios melempar status < 200 || status >= 300
? lihat defaults.js#L84
Kesalahan HTTP 500 berarti kami mencapai server dan bahkan mendapat respons yang valid menggunakan protokol http.
Dari sudut pandang aplikasi, kesalahan HTTP 500 mungkin dianggap sebagai pengecualian, tetapi ini berada pada tingkat abstraksi yang berbeda dan sama sekali tidak terkait dengan abstraksi HTTP.
Agar kompatibel dengan spesifikasi pengambilan yang akan datang, saya pikir aksio penting tidak akan terjadi jika ada respons HTTP yang valid.
Spesifikasi pengambilan menentukan properti response.ok
, sehingga pengembang aplikasi dapat dengan mudah mengidentifikasi hasil dari operasi HTTP, saya yakin pendekatan serupa dapat berguna untuk axios.
Silakan lihat di sini untuk detail lebih lanjut tentang spesifikasi pengambilan:
https://fetch.spec.whatwg.org/#dom -response-ok
https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API/Using_Fetch
Saya pikir Anda dapat menggunakan opsi konfigurasi validateStatus untuk selalu menyelesaikan ketika ada respons server. dari dokumen:
// `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
}
Benar, tetapi poin saya adalah ini seharusnya tidak menjadi default. Bahkan ini seharusnya tidak dapat dikonfigurasi.
Kami memahami kekhawatiran Anda, tetapi Axios tidak bermaksud mengganti fetch
atau meniru perilakunya. Kami bahkan tidak menggunakannya sebagai adaptor untuk melakukan panggilan (kami tetap menggunakan XHR untuk saat ini).
Axios berusaha sedapat mungkin dikonfigurasi dengan menyediakan default yang akan digunakan kebanyakan orang. Dalam hal ini orang cenderung memverifikasi kode status tepat setelah ada tanggapan dari server. Misalnya:
fetch(url).then(verifyStatus).then(...);
Itu sebabnya paket seperti fetch-check-http-status ada.
Kami ingin menghindari struktur yang berulang begitu sering. Jika Anda ingin menyelesaikan dengan respons valid apa pun dari server, Anda selalu dapat mengatur validateStatus: false
.
Komentar yang paling membantu
Benar, tetapi poin saya adalah ini seharusnya tidak menjadi default. Bahkan ini seharusnya tidak dapat dikonfigurasi.