Axios: Jangan membuang kesalahan / menangkap respons level 400

Dibuat pada 3 Feb 2015  ·  17Komentar  ·  Sumber: axios/axios

Sebagai gantinya, batasi kesalahan/tangkapan hingga kesalahan tingkat 500. Respons tingkat 400 dapat sepenuhnya valid, diharapkan, diinginkan, dll.

Saya telah mengikuti pola ini dengan bunyan logging saya -- mencatat respons 400 level sebagai peringatan, dan respons 500 level sebagai kesalahan. Idenya adalah bahwa npm test (yang mungkin mengharapkan respons tingkat 400) harus menunjukkan nol kesalahan pencatatan.

Komentar yang paling membantu

Ini telah ditambahkan sebagai fitur di 0.11.0 dengan menggunakan opsi konfigurasi validateStatus .

Semua 17 komentar

Sulit untuk membuat perubahan seperti ini pada saat ini. Di mana orang mengharapkannya untuk menangkap apa pun di luar kisaran 2xx. Dalam retrospeksi, jika permintaan dibuat, dan tanggapan diterima, saya lebih suka itu dianggap berhasil. Ini akan menjadi implementasi yang jauh lebih sedikit berpendirian, dan IMO yang jauh lebih baik. Saya pikir cara untuk menangani ini sekarang adalah dengan melewati opsi konfigurasi yang menentukan rentang apa yang harus ditangkap, default dengan apa pun di luar 2xx.

@mzabriskie +1

Saya bingung. Apakah axios gagal memenuhi janji di 4xx? Utas ini membuatnya terdengar seperti BENAR, tetapi dalam kode saya, saya mendapatkan janji yang diselesaikan pada status 4xx. Tampaknya tidak didokumentasikan.

Hal yang sama bagi saya, 400 (BAD REQUEST) kesalahan diselesaikan di then , bukan di catch . Bug yang sangat mengganggu, merusak semua aliran REST.

Masalahnya adalah dengan pencegat respons. Itu menempatkan objek kesalahan di then callback sebagai gantinya catch :

axios.interceptors.response.use(response => {
  return response;
}, error => {
  return error;
});

@mbektimirov Sedikit terlambat di sini, tapi saya rasa Anda melihat error di then karena panggilan balik kesalahan Anda bukan throw melakukan kesalahan.

+1
Menggunakan aksio untuk pertama kalinya. Pasti menyukainya, tetapi baru saja mengalami ini; akan lebih bagus untuk 400-an untuk tidak membuang kesalahan.
Ya! Ditugaskan dan dalam proses sejak 4 hari yang lalu. Terima kasih semuanya!

Ini telah ditambahkan sebagai fitur di 0.11.0 dengan menggunakan opsi konfigurasi validateStatus .

Saya sangat setuju, seharusnya tidak ada kesalahan yang melewati 500 kesalahan, yang pada dasarnya mencegah melakukan REST... Saya pikir ini sangat "desain buruk" (jangan salah, perpustakaannya bagus!!)

Bagaimana cara menyelesaikan pass 0.11.0 ini, mungkin ada contoh cara menggunakan opsi? (menggunakan 0,16 di sini)
Apakah ada cara untuk menggunakan ini di pintasan GET/POST klasik?

Terima kasih!

Setuju, untungnya responsnya ada di objek kesalahan sehingga Anda bisa mengatasinya, tetapi masuk akal untuk memilikinya dalam aliran reguler. Saya selalu merasa 200-400 lebih terkait dengan http, sedangkan 500+ lebih banyak kesalahan aplikasi. Misal validasi gagal, dll.

(pada 0.16.2) - 400 Respon masih diselesaikan di kemudian alih-alih menangkap, dan objek respons tidak ditentukan terlepas dari server apa yang dikembalikan.

Saya setuju, saya menggunakan respons 401 jika terjadi kegagalan login, dalam hal ini saya juga mengirim pesan, tetapi karena mengirimkannya ke .catch(), saya tidak dapat mengakses data itu.

Adakah berita tentang cara memperbaiki/memodifikasi ini?

@carlojacobs Anda dapat mengakses error.response.data

axios.post('/').then(response => {
    console.log(response.data);
}).catch(error => {
    console.log(error.response.data);
});

@mbektimirov Setelah melihat saran @clayreimann, saya telah mengubah pencegat saya seperti di bawah ini.
Sekarang kesalahan teratasi di blok tangkap daripada di blok.

Semoga ini bisa membantu seseorang.

axios.interceptors.response.use(function (response) {
  return response;
}, function (error) {
  return Promise.reject(error);
});
axios.defaults.validateStatus = function () {
    return true;
};

Atau

axios({
    ...,
    validateStatus: function () {
        return true;
    }
});

Saya tidak bisa memikirkan alasan kuat untuk memiliki aksioma untuk mengambil kesalahan server dan melemparkannya sebagai kesalahan runtime. Lebih suka menangani kode respons secara manual, terutama karena TypeScript tidak menyediakan jenis kesalahan yang saya ketahui, jadi Anda akhirnya harus menggali objek yang tidak diketik untuk mencoba mencari tahu apa yang sedang terjadi . Ini juga sangat memecah aliran aplikasi. Hanya satu pendapat orang.

Apakah halaman ini membantu?
0 / 5 - 0 peringkat