回答:
FetchとAxiosの機能は非常に似ていますが、下位互換性を高めるために、Axiosはより適切に機能するように見えます(たとえば、IE 11ではフェッチが機能しません。この投稿を確認してください)
また、JSONリクエストを使用する場合、次の点で私が遭遇したいくつかの違いがあります。
JSON POSTリクエストを取得する
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投稿リクエスト
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
}
そう:
お役に立てれば。
Axios request is ok when status is 200 and statusText is 'OK'
201や204のような2xx範囲の他のhttpStatusはどうですか?
それらはHTTPリクエストライブラリです...
私も同じ疑問を抱きますが、この投稿の表を参考にしてくださいisomorphic-fetch
。これはfetch
NodeJSで動作します。
http://andrewhfarmer.com/ajax-libraries/
上記のリンクは死んでいます同じテーブルはここにあります:https : //www.javascriptstuff.com/ajax-libraries/
fetch
として定義します(つまり、それを使用できることを意味します-テーブルソースに応じてライブラリを含める必要はありません)が、実際には一部のプラットフォーム(特にIEのすべてのバージョン)で実装されていないため、とにかく外部ポリフィル。fetch
timeout
(これは非常に奇妙です)。この基本的な機能を実装するには、別のモジュールを使用する必要があります。
全体的に非常に似ています。axiosのいくつかの利点:
トランスフォーマー:要求が行われる前、または応答が受信された後に、データの変換を実行できます
インターセプター:要求または応答を完全に変更できます(ヘッダーも同様)。また、リクエストが行われる前、またはPromiseが解決する前に非同期操作を実行する
組み込みXSRF保護
ブラウザサポートAxiosを確認してください
あなたはaxiosを使うべきだと思います。
フェッチAPIとaxios APIのもう1つの大きな違い
Axiosは、NPMを使用してReactプロジェクトに簡単にインストールできるスタンドアロンのサードパーティパッケージです。
あなたが言及した他のオプションはフェッチ機能です。Axiosとfetch()
は異なり、はほとんどの最新ブラウザーに組み込まれています。フェッチを使用すると、サードパーティのパッケージをインストールする必要はありません。
そのため、あなた次第です。fetch()
何をしているのかわからない場合や、場合によっては失敗する可能性があります。または、私の考えではより単純なAxiosを使用するだけです。
さらに...私はテストでさまざまなライブラリをいじっていて、4xxリクエストの処理が異なることに気付きました。この場合、私のテストは400応答でjsonオブジェクトを返します。これは、3つの一般的なライブラリが応答を処理する方法です。
// 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)
興味深いのはそれでrequest-promise-native
ありaxios
、node-fetch
そうではないのに4xx応答をスローします。またfetch
、json解析のpromiseを使用します。
.throws
。この場合、私はal 3 libsからの拒否をテストしていて、返されたデータの違いに気づきました。
axiosの利点: