4
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

axiosでエラーのレスポンスをinterceptorsでハンドルする

Last updated at Posted at 2019-08-01

エラーのレスポンスを共通処理としてハンドルするために
axiosのinterceptorsを使用する時の手法のメモです。

axiosでAPIをリクエストした際、エラーの場合はこんなJSONが返ってくるとします。

エラーのレスポンス例.json

{
  "errors": [
    {
      "code": "XXXXX"
      "message": "画像が削除されています。"
    }
  ]
}

##通常のエラーパターン
responseTypeがjsonの場合など、通常はerror.response.dataを使用します。


axios.interceptors.response.use(
  function(error) {
    const errors = error.response.data.errors;
    if(errors){
      for (const item of errors) {
        console.log(item.message);
      }
    }
  }
);

##レスポンスタイプがBlobのパターン
レスポンスのタイプがBlobの場合はerror.response.dataにはBlob形式でエラーレスポンスのJSONが設定されています。
そのため、error.response.dataをBlobからJSONに変換します。


axios.interceptors.response.use(
  async function(error) {
    //Blobの場合でJSONを読み込むためのハンドリングを追加します。
    await onBlobHandler(error);

    const errors = error.response.data.errors;
    if(errors){
      for (const item of errors) {
        console.log(item.message);
      }
    }
  }
);

//BlobをJSONに変換します。
async function onBlobHandler(error) {
  if (error.request.responseType === "blob") {
    const text = await fileReader(error.response.data);
    return JSON.parse(text);
  }
}

※fileReaderはBlobを読み込む自作ヘルパー関数です
下記記事参照
【JavaScript】Blobの中身をJSONに変換する

4
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?