web-dev-qa-db-ja.com

Axiosのhttpエラーからステータスコードを取得する方法を教えてください。

これはばかげて見えるかもしれませんが、Axiosでリクエストが失敗したときにエラーデータを取得しようとしています。

axios.get('foo.com')
    .then((response) => {})
    .catch((error) => {
        console.log(error) //Logs a string: Error: Request failed with status code 404
    })

文字列の代わりに、おそらくステータスコードと内容を持つオブジェクトを取得することは可能ですか?例えば:

Object = {status: 404, reason: 'Not found', body: '404 Not found'}
102
Sebastian Olsen

表示されるのは、toStringオブジェクトのerrorメソッドによって返される文字列です。 (errorは文字列ではありません。)

応答がサーバーから受信された場合、errorオブジェクトはresponseプロパティを含みます。

axios.get('/foo')
  .catch(function (error) {
    if (error.response) {
      console.log(error.response.data);
      console.log(error.response.status);
      console.log(error.response.headers);
    }
  });
185
Nick Uraltsev

@Nickが言ったように、JavaScriptのErrorオブジェクトをconsole.logにしたときに見られる結果はconsole.logの正確な実装に依存しています。

完全なErrorオブジェクトとそれが運ぶすべての情報をtoString()メソッドを迂回して見たい場合は、 JSON.stringify を使用します。

axios.get('/foo')
  .catch(function (error) {
    console.log(JSON.stringify(error))
  });
11
danii

エラー応答を取得するためにこのインターセプターを使用しています。

const HttpClient = axios.create({
  baseURL: env.baseUrl,
});

HttpClient.interceptors.response.use((response) => {
  return response;
}, (error) => {
  return Promise.resolve({ error });
});
4
Tan

これは既知のバグです。"axios": "0.13.1"を使用してみてください

https://github.com/mzabriskie/axios/issues/378

私は同じ問題を抱えていたので、"axios": "0.12.0"を使ってしまいました。それは私にとってはうまくいきます。

1