2016-08-25 5 views
30

これは馬鹿に思えるかもしれませんが、Axiosでリクエストが失敗したときにエラーデータを取得しようとしています。Axiosのhttpエラーからステータスコードを取得するにはどうすればよいですか?

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'} 

答えて

65

errorオブジェクトのtoStringメソッドによって返される文字列が表示されます。私はエラー応答を取得するには、このインターセプタを使用しています

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

' response'プロパティを参照しないと、自動的に文字列になる魔法を説明できますか? –

+1

'console.log'は' Error'オブジェクトをフォーマットするために 'toString'メソッドを使います。これは 'response'プロパティを参照することとは関係ありません。 –

+1

私はまだ混乱しています、これはエラーオブジェクトまたはspesificですか?私はconsole.logオブジェクトを、私は文字列ではなく、オブジェクトを取得します。 –

1

これは既知のバグですが、私はそう、私は"axios": "0.12.0"を使用して終了し、同じ問題を抱えていた"axios": "0.13.1"

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

使用するようにしてください。それは私のためにうまく動作します。

+0

これは私がいる同じ問題ではありません、があります私が 'error'を記録したときに関係するオブジェクトでもない –

3

:(。errorが文字列でない)

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

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

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

@Nickはあなたconsole.log JavaScriptをErrorオブジェクトは(IMO)に変化し、console.logの正確な実装に依存したときに表示される結果、言ったようには信じられないほど迷惑なエラーをチェックします。

あなたはそれがtoString()方法をバイパス運ぶフルErrorオブジェクトとすべての情報を見てみたいと思います場合は、あなただけJSON.stringifyを使用することができます。

axios.get('/foo') 
    .catch(function (error) { 
    console.log(JSON.stringify(error)) 
    }); 
関連する問題