Dzwonię do usługi sieciowej za pomocą funkcji pobierania, ale to samo mogę zrobić z pomocą axios. Więc teraz jestem zdezorientowany. Powinienem wybrać axios czy aportować?
Dzwonię do usługi sieciowej za pomocą funkcji pobierania, ale to samo mogę zrobić z pomocą axios. Więc teraz jestem zdezorientowany. Powinienem wybrać axios czy aportować?
Odpowiedzi:
Fetch i Axios mają bardzo podobne funkcje, ale dla większej kompatybilności wstecznej Axios wydaje się działać lepiej (pobieranie nie działa na przykład w IE 11, sprawdź ten post )
Ponadto, jeśli pracujesz z żądaniami JSON, poniżej znajdują się pewne różnice, na które się natknąłem.
Pobierz żądanie publikacji JSON
let url = 'https://someurl.com';
let options = {
method: 'POST',
mode: 'cors',
headers: {
'Accept': 'application/json',
'Content-Type': 'application/json;charset=UTF-8'
},
body: JSON.stringify({
property_one: value_one,
property_two: value_two
})
};
let response = await fetch(url, options);
let responseOK = response && response.ok;
if (responseOK) {
let data = await response.json();
// do something with data
}
Żądanie postu Axios JSON
let url = 'https://someurl.com';
let options = {
method: 'POST',
url: url,
headers: {
'Accept': 'application/json',
'Content-Type': 'application/json;charset=UTF-8'
},
data: {
property_one: value_one,
property_two: value_two
}
};
let response = await axios(options);
let responseOK = response && response.status === 200 && response.statusText === 'OK';
if (responseOK) {
let data = await response.data;
// do something with data
}
Więc:
Mam nadzieję że to pomoże.
Axios request is ok when status is 200 and statusText is 'OK'
A co z innymi httpStatus z zakresu 2xx, takimi jak 201 lub 204?
Są to biblioteki żądań HTTP ...
Kończę z tymi samymi wątpliwościami, ale tabela w tym poście skłania mnie do działania isomorphic-fetch
. Co jest, fetch
ale działa z NodeJS.
http://andrewhfarmer.com/ajax-libraries/
Powyższy link nie działa. Ta sama tabela jest tutaj: https://www.javascriptstuff.com/ajax-libraries/
fetch
jako natywny (co oznacza, że możesz go po prostu użyć - nie ma potrzeby dołączania biblioteki , zgodnie ze źródłem tabeli), podczas gdy w rzeczywistości niefetch
jest zaimplementowany na niektórych platformach (szczególnie we wszystkich wersjach IE), dla których musisz podać i tak zewnętrzny polyfill.
timeout
(co jest bardzo dziwne), musimy użyć oddzielnego modułu, aby zaimplementować tę podstawową funkcjonalność.
Według mzabriskie na GitHub :
Ogólnie są bardzo podobne. Niektóre zalety Axios:
Transformatory: umożliwiają wykonywanie transformacji danych przed wysłaniem żądania lub po otrzymaniu odpowiedzi
Interceptory: pozwalają całkowicie zmienić żądanie lub odpowiedź (również nagłówki). również wykonaj operacje asynchroniczne przed wysłaniem żądania lub przed rozliczeniem Promise
Wbudowana ochrona XSRF
sprawdź Wsparcie przeglądarek Axios
Myślę, że powinieneś użyć axios.
Jeszcze jedna główna różnica między API pobierania a API Axios
Axios to samodzielny pakiet innej firmy, który można łatwo zainstalować w projekcie React za pomocą NPM.
Inną opcją, o której wspomniałeś, jest funkcja pobierania. W przeciwieństwie do Axios, fetch()
jest wbudowany w większość nowoczesnych przeglądarek. Dzięki fetch nie musisz instalować pakietu innej firmy.
Więc to zależy od ciebie, możesz iść fetch()
i potencjalnie zepsuć, jeśli nie wiesz, co robisz LUB po prostu użyj Axios, co moim zdaniem jest prostsze.
Ponadto ... bawiłem się różnymi bibliotekami w moim teście i zauważyłem ich różną obsługę żądań 4xx. W tym przypadku mój test zwraca obiekt json z odpowiedzią 400. Oto jak 3 popularne biblioteki obsługują odpowiedź:
// request-promise-native
const body = request({ url: url, json: true })
const res = await t.throws(body);
console.log(res.error)
// node-fetch
const body = await fetch(url)
console.log(await body.json())
// Axios
const body = axios.get(url)
const res = await t.throws(body);
console.log(res.response.data)
Interesujące jest to request-promise-native
i axios
wrzuć odpowiedź 4xx, podczas gdy node-fetch
nie. Również fetch
używa obietnicę json parsowania.
.throws
metodę testowania zgłaszanych błędów. W tym przypadku testowałem odrzucenia z bibliotek al 3 i zauważyłem różnicę w zwróconych danych.
Korzyści z Axios: