axios でエラーレスポンスを取得するにはどうしたらいいの?
非同期通信を簡単に実装できる npm パッケージ「axios」。
通常、レスポンスデータを取得する際は次のように実装する。
import axios from 'axios';
(async () => {
const response = await axios.post('/api/login', { /* リクエストボディ */ });
// ↓ レスポンスデータ
const data = response.data;
})();
axios.post() や axios.get() の戻り値から .data を抜き取ると、レスポンスデータとなる。
一方、リクエスト結果が 404 だとか 500 だとか、何らかのエラーとなった場合、Promise の .catch() ないしは async / await の catch 句に入る。
その時の error オブジェクトは response とは違ってエラー情報が格納されており、一見するとレスポンスデータが見えなくて困った。
調べてみたら、error.response.data がエラー時のレスポンスデータであることが分かった。
import axios from 'axios';
(async () => {
try {
const response = await axios.post('/api/login', { /* リクエストボディ */ });
// ↓ 正常時のレスポンスデータ
const data = response.data;
}
catch(error) {
// ↓ エラー時のレスポンスデータ
const errorData = error.response.data;
}
})();
こういうことであった。エラー時にレスポンスが受け取れないワケではないので、安心。w