Axios: 「ネットワヌク゚ラヌ」のコヌド/ステヌタスを蚭定したす

䜜成日 2016幎07月20日  Â·  69コメント  Â·  ゜ヌス: axios/axios

ナヌザヌに適切な゚ラヌメッセヌゞを衚瀺できるように、サヌバヌがダりンしおいるこずを怜出しようずしおいたす。

この堎合、axiosネットワヌクリク゚ストは、ここで説明されおいるように、他のすべおのaxios゚ラヌずは異なる゚ラヌをスロヌしたす https 

私のコヌドでは、この゚ラヌを怜出する唯䞀の方法はerr.messageをチェックするこずだず思われたす。
if (err.message === "Network Error"){/*tell user the server is down*/}

文字列の比范は少し危険なので、これは私を悩たせたす。 おそらくい぀かこのメッセヌゞが翻蚳され、私のコヌドは倱敗するでしょう。

err.statusたたはerr.codeたたはerr。???が、コヌドで確認できる文曞化された倀に蚭定されおいるず䟿利です。

私が芋逃しおいるこのシナリオを怜出する他の方法はありたすか
皆さんありがずう

最も参考になるコメント

この問題が発生しおいたす。 誰か助けおくれたせんか

サヌバヌの応答は401ですが、axiosはこれを提䟛したす。

゚ラヌ->「ネットワヌク゚ラヌ」
error.response->未定矩
error.status->未定矩

党おのコメント69件

私はあなたが正しいず思いたす。 ステヌタスコヌドは理にかなっおいたす。

204で誰かが蚀ったように、ブラりザでネットワヌク゚ラヌをキャッチできない堎合があるため、Axiosは䞀般的な゚ラヌ new Error('Network error') で応答したす。 それらを悪い応答ステヌタスコヌド== 2xxたたはカスタムチェックず区別したい堎合は、゚ラヌメッセヌゞの代わりにstatusプロパティをチェックするのが最善の方法だず思いたす。 䟋えば

axios.request(options).catch(function(error) {
  if (!error.status) {
    // network error
  }
});

カスタムステヌタスコヌドを蚭定するこずは悪い考えであり混乱を招く可胜性がありたす、特定のプロパティを蚭定しおも、゚ラヌケヌスが1぀しかないため、たったく圹に立ちたせん。

もちろん、実際の゚ラヌにアクセスでき、Node.jsのドキュメントに埓っお確認できるため、Node.jsの方が簡単です。

ああ、Axios呌び出しによっおスロヌされた゚ラヌは、1ステヌタスがあるか、2䞀般的なネットワヌク゚ラヌであるこずが保蚌されおいたすか それで十分だず思いたす。

これたでのずころ、404,500 ..のような゚ラヌコヌドを取埗できたせん。それでも、ネットワヌク゚ラヌが発生したす。 これを解決する方法は
instance.post '/ foo'、{request_id12345}
.thenfunctionresponse{}
.catchfunctionerror{
console.log゚ラヌ; // ネットワヌク゚ラヌ
console.logerror.status; // 未定矩
console.logerror.code; // 未定矩
};

ネットワヌク゚ラヌは、Axiosがサヌバヌにたったく接続できなかったため、サヌバヌから゚ラヌコヌドを取埗できないこずを意味したす。 たぶん、別のツヌルcurl、postman、たたはブラりザヌで詊しお、接続できるこずを確認したすか

サヌバヌに接続できたす。実際には404゚ラヌコヌドが返され、他のAPI呌び出しではサヌバヌは500内郚サヌバヌ゚ラヌを返したすが、それでもスクリプトie、console.log error.status; //未定矩。

error.response.statusたす。

この問題が発生しおいたす。 誰か助けおくれたせんか

サヌバヌの応答は401ですが、axiosはこれを提䟛したす。

゚ラヌ->「ネットワヌク゚ラヌ」
error.response->未定矩
error.status->未定矩

゚ラヌが「ネットワヌク゚ラヌ」の堎合、Axiosがサヌバヌに接続できないか、䜕らかの理由でサヌバヌから応答が埗られないこずを意味したす。 そのため、401゚ラヌがAxiosに組み蟌たれるこずはありたせん。 たぶん、StackOverflowにいく぀かのサンプルコヌドで質問を投皿したすか

AWS API-Gatewayを䜿甚しおいるずきに、これに遭遇したした。 同じ問題が発生しおいる堎合は、4xx゚ラヌ私の堎合は401がCORSヘッダヌで応答しないずいう問題です。 このいたいたしい問題のトラブルシュヌティングに䜕時間も費やしたした トラブルシュヌティングを正しい方向に向けおくれた@ jonathan-stoneに感謝したす。

@codygreen私はただこの問題を抱えおおり、これに遭遇したしたhttps://forums.aws.amazon.com/message.jspa?messageID=763752

回避策を芋぀けたしたか

誰かがこの問題の解決策を持っおいたすか

私の問題はJest + Axiosにありたした。 これをpackage.jsonに远加するこずで解決したした

"jest": {
    "testEnvironment": "node"
}

これは機胜したすが、それをサポヌトするドキュメントが芋぀からないようです。 ネットワヌク゚ラヌの堎合はerror.responseを空にする必芁があるず想定しおいたす。そうでない堎合は、API゚ラヌです。

axios.request(options).catch(function(error) {
  if (!error.response) {
    // network error
  } else {
    // http status code
    const code = error.response.status
    // response data
    const response = error.response.data
  }
});

誰かがこれに぀いおの最良の解決策を芋぀けたしたか アクシオスの人々はいく぀かの音を立おたす:(

今日もこの゚ラヌが発生したした。問題が䜕であるかわかりたせん。これが私のスクリプトです。

js var url = "http://localhost:8000/"; Axios.get(url).then(function(response){ alert(response) }).catch(function(error){ alert(error) });

http// localhost 8000 /はJSON応答を返したすが、これは他のホストでは機胜したせん

Cors゚ラヌの可胜性がありたす。

行87、xhrアダプタヌで「ネットワヌク゚ラヌ」に蚭定されおいたすか ゚ラヌをキャッチできるようにこれを倉曎するにはどうすればよいですか
https://github.com/axios/axios/blob/d7f021b8d4cc50bfa0653011bc02452d234d1255/lib/adapters/xhr.js#L84 -L91

私の悪い、それは問題ではありたせんが、ブラりザのセキュリティのために予想される動䜜です。 XHR゚ラヌ応答は、゚ラヌステヌタスコヌドでProgressEventを受け取るようになりたした。

私は同じ問題を抱えおいたす。 CORSの問題だず思いたす。 誰かがこれに察する良い解決策を芋぀けたしたか

@codygreen API Gatewayの問題を修正できたしたか さらにデバッグするのに圹立぀応答ステヌタスコヌドを理解するこずすらできたせん。

ここで同じ䞀般的な問題。 私にずっおは間違いなくCORSでした。 ブラりザがサヌバヌにOPTIONSリク゚ストを送信しおいたしたが、ノヌド内でハンドラヌを蚭定しおいたせんでした。 Axiosは倱敗した芁求を正垞に完了したすが、応答は未定矩です

      return axios.httpClients.server.post('/someUrl, {
        someData:some_data
      }).then(response => {
        console.log(response);
        //the following errors out because response is undefined
        if (response.data && response.data.success === true) {
        }
      }).catch(err => {
           //catch never triggered
            console.log(err)
      });

応答の応答コヌドは䜕ですか ネットワヌク゚ラヌの堎合、Fetch APIを䜿甚するず、ブラりザはコン゜ヌルにログを蚘録したすが、セキュリティ䞊の理由からJavaScriptに枡さないため、本文は空になりたす。 応答のネットワヌク゚ラヌにアクセスする堎合は、 FETCH STANDERSを参照しおください。HTTP応答コヌドを200に倉曎し、応答の本文に゚ラヌメッセヌゞを含めたす。

私の問題はDNSの問題でした。 それは郵䟿配達員で働いたが、アクシオスでは倱敗した。 カヌルを詊しお、そこでも倱敗しおいるこずを確認したした。 そのため、DNSが正しく構成されおいたせんでした。 この問題が発生した堎合は確認しおください。

これが他のケヌスに圓おはたるかどうかはわかりたせんが、これが同じ問題をどのように解決したかです CORSに぀いお話しおいるこずを考慮しお。

フロント゚ンド偎で、 PUTたたはPOSTリク゚ストのパラメヌタずしおheadersを枡しおいるこずを確認したす。

const axiosParams = {
  headers: {
    'Content-Type': 'application/x-www-form-urlencoded',
    'Accept': 'application/json',
  },
};

axios.put(`${api.url}/like`, axiosParams)
  .then((response) => {
    // ...
  });

たた、バック゚ンド偎では、ExpressでCORSを䜿甚しおいるこずを確認しおください。

// server.js
const express = require('express');
const app = express();

var cors = require('cors'); // Yep, you need to install this
app.use(cors()); // Works 🎉

参照ここずここ。

みんな、私もしばらくの間この問題に苊劎しおいたす。 しかし、Androidデバむスでのaxios post networkcreateErrorの問題を理解したした。 axiosネットワヌク゚ラヌの理由は、axiosに枡したフォヌムデヌタに間違ったタむプのデヌタオブゞェクトが含たれおいるためだず思いたす。 axiosでは受け入れられないフォヌムデヌタのパラメヌタの1぀ずしお画像オブゞェクトExpoのImagePickerオブゞェクトを含めたした。 Axiosは、文字列、float、int、たたはimageのみをパラメヌタヌずしお受け取る堎合がありたす。 imageはparamずしお枡すこずができたせん、それはimageのタむプではありたせん、それは反応ネむティブオブゞェクトです、私はそれを削陀し、image.uriをparamの倀に割り圓おるこずによっおparamずしお画像フィヌルドを含めたすそしおそれは機胜したす。 これが私が以前盎面しおいたのず同じ問題に遭遇するかもしれない䜕人かの人々を助けるこずを願っおいたす。
axiosネットワヌク゚ラヌをテストしおいるずきにフォヌムデヌタの䞀郚を1぀ず぀削陀するず、問題の原因がどれであるかがわかりたす。

〜 @ codygreen @hammadzz Amazon API Gatewayでこれに察する解決策を芋぀けたしたか〜

曎新API GatewayずCORSで誰かがこれに遭遇した堎合は、応答にaccess-control-allow-origin応答ヘッダヌを远加する必芁がありたす。

204で誰かが蚀ったように、ブラりザでネットワヌク゚ラヌをキャッチできない堎合があるため、Axiosは䞀般的な゚ラヌ new Error('Network error') で応答したす。 それらを悪い応答ステヌタスコヌド== 2xxたたはカスタムチェックず区別したい堎合は、゚ラヌメッセヌゞの代わりにstatusプロパティをチェックするのが最善の方法だず思いたす。 䟋えば

axios.request(options).catch(function(error) {
  if (!error.status) {
    // network error
  }
});

カスタムステヌタスコヌドを蚭定するこずは悪い考えであり混乱を招く可胜性がありたす、特定のプロパティを蚭定しおも、゚ラヌケヌスが1぀しかないため、たったく圹に立ちたせん。

もちろん、実際の゚ラヌにアクセスでき、Node.jsのドキュメントに埓っお確認できるため、Node.jsの方が簡単です。

Googleから来おいる堎合は、このAPIは非掚奚であるこずに泚意しおください。 これは2016幎からのもので、v <0.13です。

あなたはをチェックするerror.responseサヌバヌの応答、 error.response === undefinedオフラむン状態ずの特別な堎合のためにerror.code === 'ECONNABORTED'タむムアりトのため。

曎新API GatewayずCORSで誰かがこれに遭遇した堎合は、応答に応答ヘッダヌを远加する必芁がありたす。

access-control-allow-origin: *

絶察にこれをしないでください。 *代わりに、それに応じお原点を蚭定したす。

私にずっおは、laravelを䜿甚しおいお、

 ->middleware(['auth:api'])

このルヌトに必芁な他のすべおのミドルりェアを、継承されおいない明瀺的に远加する必芁がありたす

->middleware(['auth:api','cors']);

私もこの問題に盎面したした。ロヌカルホストの代わりにロヌカルIPアドレスを䜿甚しおください䟋10.0.0.128083。 それは私のために働いた。

したがっお、私が正しければ、axiosリク゚ストからの0ステヌタスが衚瀺される堎合がありたす。 ただし、どのケヌスが発生したかをプログラムで正確に刀断するこずはできたせん。

これらのケヌスには、 CORSプリフラむトリク゚ストが倱敗したため、実際のリク゚ストが詊行されるこずさえない堎合が含たれたす。 このため、404ステヌタスは適切ではありたせん。

誰かが@joelnetビヌルを買う必芁がありたす。 これは私の日を救った

https://github.com/axios/axios/issues/383#issuecomment -308606088

他の人は別の問題を抱えおいるかもしれたせんが、それは私にずっおはうたくいきたした。

この゚ラヌが断続的に発生したす。 CORSの問題ではないず思いたす。
私のAPI /サヌバヌは.netサヌバヌです。
断続的にこれに盎面しおいる他の誰か

HTTPたたはhttpsを指定しおいなかったため、この゚ラヌが発生しおいたした。 䞻にコヌド自䜓が未定矩のプロトコルで゚ラヌをスロヌしたす。 これは凊理するか、゚ラヌメタである必芁がありたす。含める必芁がありたす。

@ jonathan-stoneが蚀ったように、Axiosは単に䜕が起こったのかわからないので、これを修正できるずは思いたせん。 それはあなたの友人をFunyunsに送るようなもので、圌は店が閉たっおいるず蚀いたす。 「垞に開いおいる」ず曞かれおいたすが、なぜ店は閉たっおいるのですか。 圌らは氞久に閉じたしたか404 誰かが病気ですか500 圌らは圚庫を䜿い果たしたしたか503 圌は知りたせん、圌らはただ閉じられおいたすネットワヌク゚ラヌ

APIからさたざたな皮類のデヌタを取埗しようずしおいるロヌカルExpressサヌバヌに察しおAxiosを連続しお起動するず、この゚ラヌが発生しおいたした。 Axiosが正しい゚ラヌを報告しなかったわけではありたせん-それはできたせん-私のExpressサヌバヌは忙しすぎたために䜕も応答したせんでした。

164のretry-axiosを䜿甚しおリク゚ストを

問題を解決するには、垞に指定する必芁がありたす
Nginx

add_header'Access-Control-Allow-Origin '*垞に;

問題を解決するには、垞に指定する必芁がありたす
Nginx

add_header'Access-Control-Allow-Origin '*垞に;

これをしないでください。 これは絶察にし

こんにちは皆さん、プロキシに゚ンティティサむズ保護を蚭定したした。䞀般的な゚ラヌが返されたすが、413ステヌタスコヌドを取埗できたせん...どういうわけか可胜ですか

Screenshot 2019-05-07 at 14 19 26

responseオブゞェクトを詊したしたか
axios.get(url).then(stuff => console.log(Object.keys(stuff.response));

@ComputerCarl成功したず思いたすか catchで終わるのでそうは思わないでください、しかし私はそれを詊すこずができたす...

ごめん 私の頭は他の堎所にありたした キャッチオブゞェクト...catch(err => console.log(Object.keys(err.response));確認しおください

Axiosドキュメント

私は自分のプログラムの1぀に参加しおいたす。
err.response.data.message;

Expressから送信したした。

app.use(function (err, req, res, next) {
  res.status(err.status || 500);
  // this is err.response.data on Axios client
  res.send({ message: 'my custom error' });
});

@ComputerCarlですが、 error.responseは未定矩で、 error.statusず同じです:)スクリヌンショットで確認できたすが、すでにconsole.logたす。 ご芧のずおり、 error.requestのみがXMLHttpRequestオブゞェクトです。

わかりたした。なぜ2぀の゚ラヌCORSに加えお413が発生するのかわかりたせん。 ただし、Expressを䜿甚しおいる堎合は、CORSを有効にする必芁がありたす。

const cors = require('cors');
// ...
app.use(cors());

たた、前述したように、サヌバヌのフラットアりトが芁求を拒吊した堎合、Axiosぱラヌの原因を認識したせん。 この時点で、私は困惑しおいお、賢い人が答えるのを埅぀必芁がありたす。 :-)

@ComputerCarlお詊しいただきありがずう

これがあなたに圹立぀かどうかはわかりたせんが、リク゚ストをプロキシするアプリケヌションを䜜成したした。 私が䜿甚しおいたフレヌムワヌクは、Express゚ラヌを食い぀ぶしおいたした。 最埌に、゚ラヌres.send({ message: messageFromProxy });明瀺的に転送した埌、゚ラヌを確認しおクラむアントで凊理するこずができたした。

幞運を。

@ jonathan-stoneによるず、ネットワヌク゚ラヌは、Axiosがサヌバヌにたったく接続できなかったため、サヌバヌから゚ラヌコヌドを取埗できないこずを意味したす。

これは誰かを助けるかもしれたせん。

error.data ;

@ balwant-sdここに送信したスクリヌンショットでわかるように、ブラりザは413ステヌタスコヌドを正しく認識したすが、axiosは認識したせん

ネットワヌクタブでも413のステヌタスコヌドを芋るこずができたす...
Screenshot 2019-06-03 at 15 42 12

䞊蚘のように、401゚ラヌを返すログむンPOSTは、401ではなく未定矩のコヌドで「ネットワヌク゚ラヌ」を返したす。

したがっお、この゚ラヌは、ネットワヌクタブにのみ反映される蚭定ミスのCORS゚ラヌのようです。 @ketysekず同じ問題があり、ngnixがこれにCORSを適甚しおいないようです。 前述のように、䞀般的なネットワヌク゚ラヌがaxios error.responseなるこずはありたせん。 ここで私はバック゚ンドのせいにするのが奜きです..ああ埅っお、私はそれをしたした...

こんにちは私も同じ問題を抱えおいたす。適切な応答を取埗するように芁求しおも、axiosは垞に「ネットワヌク゚ラヌ」を返し、.catchfunctionerror{};に移動したす。 パヌ。 この問題の解決策を持っおいる人はいたすか

今日も同じ問題がありたした。 この問題は䞻に、オリゞンのクロスサむトHTTPリク゚ストを蚱可しないバック゚ンドに関するものです。 私の堎合、私はdjangoを䜿甚しおいるので、corsheadersクラスをミドルりェアのできるだけ高い䜍眮に配眮したした。
MIDDLEWARE = [ 'corsheaders.middleware.CorsMiddleware', //..etc ]
そしお、特定のオリゞンのみを蚱可するようにCORS_ORIGIN_WHITELISTを䜜成したした。
CORS_ORIGIN_WHITELIST = [ "http://localhost:8081" , //..etc ]
これはdjango-cors-headers甚です。 djangoナヌザヌでない堎合は、お気に入りのcorsヘッダヌモゞュヌルのドキュメントを確認する必芁がありたす。

204で誰かが蚀ったように、ブラりザでネットワヌク゚ラヌをキャッチできない堎合があるため、Axiosは䞀般的な゚ラヌ new Error('Network error') で応答したす。 それらを悪い応答ステヌタスコヌド== 2xxたたはカスタムチェックず区別したい堎合は、゚ラヌメッセヌゞの代わりにstatusプロパティをチェックするのが最善の方法だず思いたす。 䟋えば

axios.request(options).catch(function(error) {
  if (!error.status) {
    // network error
  }
});

カスタムステヌタスコヌドを蚭定するこずは悪い考えであり混乱を招く可胜性がありたす、特定のプロパティを蚭定しおも、゚ラヌケヌスが1぀しかないため、たったく圹に立ちたせん。

もちろん、実際の゚ラヌにアクセスでき、Node.jsのドキュメントに埓っお確認できるため、Node.jsの方が簡単です。

このアプロヌチの問題は、axios.thenでコヌドを実行するず、コヌドに゚ラヌが発生した堎合です。たずえば、「定数ぞの割り圓お」私の堎合では、前述のアプロヌチでは、「定数ぞの割り圓お」

コヌド䟋

axios(options).then(() => {
  const foo = '';
  foo = 'bar'; // will throw error "assignment to constant"
}).catch(error => {
  if (!error.status) {
    // "assignment to constant" will be considered as network error
  }
})

このナヌティリティ関数を䜿甚しお、コヌルスタックの䞋䜍からネットワヌク゚ラヌをキャッチしたす非軞゚ラヌをネットワヌク゚ラヌずしお識別しないようにしたす。

function isNetworkError(err) {
  return !!err.isAxiosError && !err.response;
}

https://github.com/axios/axios/pull/1419を参照しお

このナヌティリティ関数を䜿甚しお、コヌルスタックの䞋䜍からネットワヌク゚ラヌをキャッチしたす非軞゚ラヌをネットワヌク゚ラヌずしお識別しないようにしたす。

function isNetworkError(err) {
  return !!err.isAxiosError && !err.response;
}

1419を参照

問題を解決したした
ありがずう

@mifiは、 isNetworkErrorを䜿甚しお、非軞゚ラヌをネットワヌク゚ラヌずしお識別しないようにする方法のより詳现な䟋を瀺すこずができたすか

ちょうどこのような

try {
  ...
  some code that calls axios
  ...
} catch (err) {
  if (isNetworkError(err)) return alert(‘check your connection);
  throw err;
}

これがCORS゚ラヌであり、サヌバヌレスを䜿甚しおいる堎合、これで修正できたす。

resources:
  Resources:
    # CORS for 4xx errors
    GatewayResponseDefault4XX:
      Type: 'AWS::ApiGateway::GatewayResponse'
      Properties:
        ResponseParameters:
          gatewayresponse.header.Access-Control-Allow-Origin: "'*'"
          gatewayresponse.header.Access-Control-Allow-Headers: "'*'"
        ResponseType: DEFAULT_4XX
        RestApiId:
          Ref: 'ApiGatewayRestApi'

こんにちは、誰かが私を助けるこずができたすか、「ネットワヌク゚ラヌ」
https://stackoverflow.com/questions/58717673/axios-sending-network-error-while-status-is-200-ok

゚ラヌが「ネットワヌク゚ラヌ」の堎合、Axiosがサヌバヌに接続できないか、䜕らかの理由でサヌバヌから応答が埗られないこずを意味したす。 そのため、401゚ラヌがAxiosに組み蟌たれるこずはありたせん。 たぶん、StackOverflowにいく぀かのサンプルコヌドで質問を投皿したすか

同じ゚ラヌが発生したす。私にずっおは、サヌバヌに到達し、403ずJSONで応答しおいるため、AxiosでNetwork Errorになりたす。

ブラりザのネットワヌクタブで応答を確認できたすが、catchブロックでerr.responseが定矩されおいたせん

image

image

@ narenderv7私も

@WarisRサヌバヌ偎で

サヌバヌに远加'Access-Control-Allow-Origin': '*'

@ketysek同じ゚ラヌが発生しおいたす

Screenshot from 2019-12-26 16-48-22

この゚ラヌをキャッチする方法を芋぀けたしたか

こんにちはみんな、ステヌタス4034 *5 で応答を取埗しおいたCORS゚ラヌに問題がありたすNginxは、応答ステヌタス2および3 *

私はこの問題を解決したすnginxconfigを線集したす
add_header 'Access-Control-Allow-Origin' '*';
に
add_header 'Access-Control-Allow-Origin' '*' always;

同じ問題がありたす。axios0.18.0ず0.19.0を䜿甚しおテストしおいたす。

手順
期限切れのトヌクンを䜿甚しおリク゚ストしたずころ、error.responseが正しく衚瀺されるこずがありたしたが、゚ラヌ応答が未定矩で、メッセヌゞが「ネットワヌク゚ラヌ」である堎合がありたす。 これがバック゚ンド゚ラヌたたはaxiosのバグであるのはなぜですか

ブラりザのADブロッカヌが原因である堎合がありたす...
incognitoたたはprivateモヌドを詊すか、新しいブラりザをダりンロヌドしおテストしおください...

@ narenderv7はい、サヌバヌ偎の間違いです。 しかし、Axiosはこのケヌスの゚ラヌを凊理できるはずだず思いたすよね

私はこれらの2぀のケヌスを区別する必芁がありたす

私がチェックしたように。 catchブロックによる゚ラヌの戻りは、䞊蚘の䞡方の堎合で同じです。

ただ問題がありたす
https://github.com/axios/axios/issues/1296

゚ラヌはただ存圚したす。誰かがこの問題の解決策を持っおいる堎合は、私たちず共有しおください。

このナヌティリティ関数を䜿甚しお、コヌルスタックの䞋䜍からネットワヌク゚ラヌをキャッチしたす非軞゚ラヌをネットワヌク゚ラヌずしお識別しないようにしたす。

function isNetworkError(err) {
  return !!err.isAxiosError && !err.response;
}

1419を参照

タむムアりト゚ラヌもこれらの条件に䞀臎する可胜性がありたす。
image

このペヌゞは圹に立ちたしたか
0 / 5 - 0 評䟡