Ich rufe den Webdienst mit Fetch auf, aber das gleiche kann ich mit Hilfe von Axios tun. Jetzt bin ich also verwirrt. Soll ich entweder Axios oder Hol holen?
Ich rufe den Webdienst mit Fetch auf, aber das gleiche kann ich mit Hilfe von Axios tun. Jetzt bin ich also verwirrt. Soll ich entweder Axios oder Hol holen?
Antworten:
Fetch und Axios sind sich in der Funktionalität sehr ähnlich, aber für mehr Abwärtskompatibilität scheint Axios besser zu funktionieren (Fetch funktioniert beispielsweise in IE 11 nicht, lesen Sie diesen Beitrag ).
Wenn Sie mit JSON-Anforderungen arbeiten, sind die folgenden Unterschiede aufgeführt, auf die ich gestoßen bin.
JSON-Post-Anfrage abrufen
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
}
Axios JSON-Post-Anfrage
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
}
So:
Hoffe das hilft.
Axios request is ok when status is 200 and statusText is 'OK'
Was ist mit anderen httpStatus im 2xx-Bereich wie 201 oder 204?
Sie sind HTTP-Anforderungsbibliotheken ...
Am Ende habe ich den gleichen Zweifel, aber die Tabelle in diesem Beitrag bringt mich dazu, mitzumachen isomorphic-fetch
. Welches ist fetch
aber funktioniert mit NodeJS.
http://andrewhfarmer.com/ajax-libraries/
Der obige Link ist tot. Dieselbe Tabelle befindet sich hier: https://www.javascriptstuff.com/ajax-libraries/
fetch
als nativ definiert ( dh Sie können es einfach verwenden - es muss keine Bibliothek entsprechend der Tabellenquelle hinzugefügt werden), während fetch
es auf einigen Plattformen (insbesondere in allen Versionen von IE), für die Sie eine angeben müssen, nicht implementiert ist externe Polyfüllung sowieso.
timeout
wir (was sehr seltsam ist) ein separates Modul verwenden müssen, um diese grundlegende Funktionalität zu implementieren.
Laut mzabriskie auf GitHub :
Insgesamt sind sie sehr ähnlich. Einige Vorteile von Axios:
Transformatoren: Ermöglichen die Durchführung von Transformationen für Daten, bevor eine Anforderung gestellt wird oder nachdem eine Antwort empfangen wurde
Interceptors: Mit dieser Option können Sie die Anforderung oder Antwort vollständig ändern (auch Header). Führen Sie außerdem asynchrone Vorgänge aus, bevor eine Anforderung gestellt wird oder bevor Promise ausgeführt wird
Eingebauter XSRF- Schutz
Bitte überprüfen Sie Browser Support Axios
Ich denke, Sie sollten Axios verwenden.
Ein weiterer wesentlicher Unterschied zwischen der Abruf-API und der Axios-API
Axios ist ein eigenständiges Paket von Drittanbietern, das mithilfe von NPM problemlos in ein React-Projekt installiert werden kann.
Die andere Option, die Sie erwähnt haben, ist die Abruffunktion. Im Gegensatz zu Axiosfetch()
ist es in den meisten modernen Browsern integriert. Mit fetch müssen Sie kein Paket eines Drittanbieters installieren.
Es liegt also an Ihnen, fetch()
ob Sie nicht wissen, was Sie tun, oder ob Sie Axios verwenden, was meiner Meinung nach einfacher ist.
Außerdem ... habe ich in meinem Test mit verschiedenen Bibliotheken herumgespielt und festgestellt, dass sie mit 4xx-Anfragen unterschiedlich umgehen. In diesem Fall gibt mein Test ein JSON-Objekt mit einer Antwort von 400 zurück. So behandeln 3 beliebte Bibliotheken die Antwort:
// 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)
Interessant ist das request-promise-native
und axios
4xx Antwort auf, während node-fetch
nicht. Auch fetch
verwendet ein Versprechen für json Parsing.
.throws
Methode zum Testen von Fehlern haben. In diesem Fall habe ich Ablehnungen von allen 3 Bibliotheken getestet und den Unterschied in den zurückgegebenen Daten festgestellt.
Vorteile von Axios: