【Node.js】aspida/fetchでエラーを投げさせ、レスポンスメッセージも取得する

こんにちは、フリーランスエンジニアの太田雅昭です。

aspida/fetch

aspidaは、TypeScriptで使えるapiクライアントです。

GitHub – aspida/aspida: TypeScript friendly HTTP client wrapper for the browser and node.js.

TypeScript friendly HTTP client wrapper for the browser and node.js. – GitHub – aspida/aspida: TypeScript friendly HTTP client wrapper for the browser and node.js.

axiosとfetchのどちらでも使えます。@aspida/fetch, @aspida/axiosのどちらかをインストールするだけです。

aspida/fetchのエラー動作

aspida/fetchは、デフォルトではリクエストに失敗してもエラーを投げません。これはfetchがエラーを投げないことに由来しています。

そこでエラーを投げさせるには、初期化時に以下のようにパラメータを渡します。

import fetchClient from "@aspida/fetch"
import api from "./generated/$api"

export const apiClient = api(fetchClient(
    fetch,
    {
        ...
        throwHttpErrors: true,
    }
));

これでエラー時にthrowされるようになります。

ところがaspida/axiosならレスポンスメッセージもエラー内容に含まれるのですが、aspida/fetchだとメッセージは含まれません。

aspida/fetchで、エラー時にレスポンスメッセージを取得する

以下のようにすれば、エラーメッセージも取得できます。

...

        } catch (e: any) {
            console.error(await e.response.json());
        }

エラーオブジェクトから直接responseを取得する形ですね。ここからメッセージも取得できます。

小話

明日の最高気温は14度だそうで、少し暖かくなりそうです。よかったー。