ホームページ > ウェブフロントエンド > jsチュートリアル > Axios インターセプター React JS

Axios インターセプター React JS

Patricia Arquette
リリース: 2024-11-10 08:56:03
オリジナル
428 人が閲覧しました

Axios interceptor   React JS

この記事では、React で Axios を使用して安全で効率的な API クライアントを作成する方法について説明します。インターセプターを使用した Axios のセットアップ、エラー処理構成、APIClient クラスを使用した CRUD メソッドについて説明します。このスクリプトがどのように動作するか、そしてそれが提供する機能を詳しく見てみましょう。

1. Axios の基本構成

import axios from "axios";
import secureLocalStorage from "react-secure-storage";

axios.defaults.baseURL = "";
axios.defaults.headers.post["Content-Type"] = "application/json";

ログイン後にコピー

この初期 Axios セットアップでは、baseURL を定義し、すべての POST リクエストの Content-Type を設定します。 BaseURL を構成すると、Axios はこのベース URL をすべてのリクエストに自動的に追加し、API 呼び出しでのエンドポイントの操作が容易になります。

2.応答とエラー処理にインターセプターを使用する

インターセプターは、応答とエラーをグローバルに処理できる強力なツールです。

応答の処理

axios.interceptors.response.use(
    function (response) {
        return response.data ? response.data : response;
    },
    // ...

## Handling Errors

);
ログイン後にコピー

この応答インターセプターは、応答内にデータがあるかどうかを確認します。存在する場合は、単にデータを返します。こうすることで、response.data に繰り返しアクセスすることなく、コンポーネントで必要な関連データのみを取得できます。

エラーの処理

function (error) {
    if (error?.response?.status === 401 && error?.response?.data?.data === 'Token is not valid'){
        secureLocalStorage.clear()
        window.location.href = '/'
    } else {
        let message;
        switch (error?.response?.status) {
            case 500:
                message = error?.response;
                break;
            case 401:
                message = error?.response;
                break;
            case 404:
            case 400:
            case 409:
                message = error?.response?.data;
                break;
            default:
                message = error.message || error;
        }
        return Promise.reject(message);
    }
}

ログイン後にコピー

このセクションでは、応答ステータスが 401 でトークンが無効な場合、アプリは安全なローカル ストレージからトークンをクリアし、ユーザーをログイン ページにリダイレクトします。これにより、認証セッションの有効期限が切れた場合、ユーザーは自動的にログアウトされます。他のステータス コードの場合は、エラーをキャプチャし、エラーの種類に基づいて適切なメッセージを返します。

3. setAuthorization 関数

const setAuthorization = (token) => {
    axios.defaults.headers.common["token"] = token;
};
ログイン後にコピー

この関数を使用すると、アプリはすべてのリクエストに認証トークンを動的に追加できます。ログイン後に setAuthorization(token) を呼び出すと、リクエストヘッダーにトークンが自動的に追加されます。

4. CRUD メソッドの APIClient クラスの作成
APIClient クラスは、get、create、update、put、delete などの HTTP リクエストの標準メソッドを提供します。

メソッドの取得
このメソッドは柔軟で、オブジェクト形式または文字列形式のパラメータを処理します。

get = (url, params) => {
    let response;
    let paramKeys = [];

    if (params && typeof (params) === 'object') {
        Object.keys(params).map(key => {
            if (key === 'pagination') {
                paramKeys.push("pageIndex=" + String(params[key]?.pageIndex || 1));
                paramKeys.push("pageSize=" + String(params[key]?.pageSize || 10));
            } else {
                paramKeys.push(key + '=' + params[key]);
            }
        });
        const queryString = paramKeys.length ? paramKeys.join('&') : "";
        response = axios.get(`${url}?${queryString}`, params);
    } else if (typeof (params) === 'string') {
        response = axios.get(`${url}/${params}`);
    } else {
        response = axios.get(url, params);
    }

    return response;
};

ログイン後にコピー

このメソッドはクエリ文字列を自動的にフォーマットするため、ページネーション、フィルター、並べ替えなどの複雑なパラメーターを含む GET リクエストを簡単に作成できます。

メソッドの作成、更新、配置、削除
これらのメソッドは、Axios の組み込み関数 post、patch、put、delete 関数を使用して API と対話します。

create = (url, data) => {
    return axios.post(url, data);
};

update = (url, data) => {
    return axios.patch(url, data);
};

put = (url, data) => {
    return axios.put(url, data);
};

delete = (url, config) => {
    return axios.delete(url, { ...config });
};


ログイン後にコピー

このクラスは API 呼び出しを抽象化し、コンポーネント内のコードをよりクリーンかつ構造化し、冗長性を削減します。

API クライアントの使用例

import { API_URL, API_VERSION } from "#/Common/constants/env";
import { APIClient } from "#/helpers/api_helper";

export const POST_LOGIN = API_URL + API_VERSION +  "/auth/login";

const api = new APIClient();
export const Login = (data: any) => api.create(POST_LOGIN, data);

ログイン後にコピー

完全なスクリプトについては、次の要点をご覧ください
アクシオス・インターセプター

以上がAxios インターセプター React JSの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:dev.to
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート