これはばかげて見えるかもしれませんが、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'}
表示されるのは、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);
}
});
@Nickが言ったように、JavaScriptのError
オブジェクトをconsole.log
にしたときに見られる結果はconsole.log
の正確な実装に依存しています。
完全なError
オブジェクトとそれが運ぶすべての情報をtoString()
メソッドを迂回して見たい場合は、 JSON.stringify を使用します。
axios.get('/foo')
.catch(function (error) {
console.log(JSON.stringify(error))
});
エラー応答を取得するためにこのインターセプターを使用しています。
const HttpClient = axios.create({
baseURL: env.baseUrl,
});
HttpClient.interceptors.response.use((response) => {
return response;
}, (error) => {
return Promise.resolve({ error });
});
これは既知のバグです。"axios": "0.13.1"
を使用してみてください
https://github.com/mzabriskie/axios/issues/378
私は同じ問題を抱えていたので、"axios": "0.12.0"
を使ってしまいました。それは私にとってはうまくいきます。