ホームページ >ウェブフロントエンド >jsチュートリアル >Next.js で Axios リクエスト インターセプターを実装する方法

Next.js で Axios リクエスト インターセプターを実装する方法

PHPz
PHPzオリジナル
2024-08-12 20:30:34951ブラウズ

Axios は、サーバーへの HTTP リクエストの送信を容易にする、広く使用されている JavaScript ライブラリです。その際立った機能の 1 つはインターセプターです。これにより、アプリはリクエストとレスポンスをキャッチできるようになります。 Axios インターセプターを使用すると、リクエストまたはレスポンスがアプリケーションに到達する前に、リクエストまたはレスポンスごとに実行される関数をセットアップできます。これは、認証トークンの追加、ログ記録、グローバルなエラー処理などのタスクに役立ち、コードがクリーンになり、管理が容易になります。

このブログ投稿では、Next.js アプリケーションに Axios リクエスト インターセプターを実装する方法を学びます。まず Axios をセットアップし、次にリクエストとレスポンスのインターセプターを作成して使用する方法を見ていきます。最後には、インターセプターを使用してアプリケーションを改善し、コードを整理する方法を理解できるようになります。

プロジェクトのセットアップ

Next.js アプリケーションに Axios リクエスト インターセプターを実装する方法を説明する前に、次のものが揃っていることを確認してください。

  • Node.js と npm/yarn がインストールされています: Node.js と npm (または Yarn) がマシンにインストールされていることを確認します。ここから Node.js をダウンロードできます。

  • Next.js プロジェクトのセットアップ: Next.js プロジェクトのセットアップが必要です。お持ちでない場合は、「Create Next App」を使用して新しい Next.js プロジェクトを作成できます:

npx create-next-app my-axios-app
cd my-axios-app
npm install axios

または

yarn add axios

リクエストインターセプタの実装

Axios のリクエスト インターセプターを使用すると、リクエストがサーバーに到達する前に変更できます。これらは、認証トークンの追加、カスタム ヘッダーの設定、またはリクエストのログ記録に役立ちます。 Next.js アプリケーションに Axios リクエスト インターセプターを実装する方法は次のとおりです。

ステップ 1: Axios インスタンスを作成する

lib フォルダー (またはプロジェクト内の任意の場所) に新しいファイル axiosInstance.js を作成します。前に作成した Axios インスタンスにリクエスト インターセプターを追加できます。このインターセプターは、すべてのリクエストが送信される前に実行されます。

Axios インスタンスを作成すると、そのインスタンスで行われるすべてのリクエストに適用されるベース URL やヘッダーなどのデフォルト設定を設定できます。これは、コードを DRY (同じことを繰り返さない) に保つのに役立ちます。

lib フォルダーに axiosInstance.js という名前の新しいファイルを作成し、Axios インスタンスをセットアップします。

// lib/axiosInstance.js
import axios from 'axios';

const axiosInstance = axios.create({
  baseURL: 'https://dummyjson.com', // Replace with your API base URL
  timeout: 1000,
  headers: { 'Content-Type': 'application/json' }
});

// Add a request interceptor
axiosInstance.interceptors.request.use(
  function (config) {
    // Do something before the request is sent
    // For example, add an authentication token to the headers
    const token = localStorage.getItem('authToken'); // Retrieve auth token from localStorage
    if (token) {
      config.headers.Authorization = `Bearer ${token}`;
    }
    return config;
  },
  function (error) {
    // Handle the error
    return Promise.reject(error);
  }
);

export default axiosInstance;

これまでに行ったことの概要は次のとおりです:

  • axios.create() を使用して Axios インスタンスを作成しました。
  • baseURL を API のベース URL に設定します。 API の構成に合わせてこれを調整できます。
  • 送信リクエストをインターセプトして変更するために interceptors.request.use() を使用しました。これにより、ヘッダーや認証トークンを追加したり、リクエスト構成にその他の変更を加えることができます。

ステップ 2: Next.js ページまたはコンポーネントで Axios インスタンスを使用する

リクエスト インターセプターを設定すると、通常どおり Next.js ページまたはコンポーネントで Axios インスタンスを使用できます。インターセプターは、各リクエストが送信される前に、自動的にトークンを追加します (または、その他の構成されたアクションを実行します)。

// pages/index.js
import React, { useEffect, useState } from 'react';
import axiosInstance from '../lib/axiosInstance';

export default function Home() {
  const [data, setData] = useState(null);

  useEffect(() => {
    axiosInstance.get('/products/1') // Replace with your API endpoint
      .then(response => {
        setData(response.data);
      })
      .catch(error => {
        console.error('Error fetching data:', error);
      });
  }, []);

  return (
    <div>
      <h1>Data from API</h1>
      {data ? (
        <pre class="brush:php;toolbar:false">{JSON.stringify(data, null, 2)}
) : (

Loading...

)}
); }

How to implement Axios Request Interceptors in Next.js

ステップ 3: インターセプターのカスタマイズ

必要に応じて、リクエスト インターセプターをカスタマイズして、他のアクションを実行できます。たとえば、各リクエストの詳細をログに記録したい場合があります:

axiosInstance.interceptors.request.use(
  function (config) {
    // Log the request details
    console.log('Request:', config);
    return config;
  },
  function (error) {
    // Handle the error
    return Promise.reject(error);
  }
);

この設定では、各リクエストの詳細がコンソールに記録されるため、デバッグに役立ちます。

How to implement Axios Request Interceptors in Next.js

Next.js アプリケーションにリクエスト インターセプターを実装すると、すべてのリクエストが送信される前に一貫して変更または拡張されるようになり、コードの保守性と機能性が向上します。

レスポンスインターセプターの実装

リクエスト インターセプターを使用して発信リクエストを変更できるのと同様に、Axios のレスポンス インターセプターを使用すると、レスポンスがアプリケーション コードに到達する前にグローバルにレスポンスを管理できます。これは、エラー処理、応答変換、ロギングなどのタスクに特に役立ちます。 Axios を使用して Next.js アプリケーションにレスポンス インターセプターを実装する方法を見てみましょう。

ステップ 1: 応答インターセプターを作成する

axiosInstance.js ファイルで、作成した Axios インスタンスにレスポンス インターセプターを追加できます。このインターセプターは、応答が受信されるたびに実行されます。

// lib/axiosInstance.js
import axios from 'axios';

const axiosInstance = axios.create({
  baseURL: 'https://dummyjson.com', // Replace with your API base URL
  timeout: 1000,
  headers: { 'Content-Type': 'application/json' }
});

// Add a request interceptor
axiosInstance.interceptors.request.use(
  function (config) {
    // Do something before the request is sent
    const token = localStorage.getItem('authToken'); // Retrieve auth token from localStorage
    if (token) {
      config.headers.Authorization = `Bearer ${token}`;
    }
    return config;
  },
  function (error) {
    // Handle the error
    return Promise.reject(error);
  }
);

// Add a response interceptor
axiosInstance.interceptors.response.use(
  function (response) {
    // Do something with the response data
    console.log('Response:', response);
    return response;
  },
  function (error) {
    // Handle the response error
    if (error.response && error.response.status === 401) {
      // Handle unauthorized error
      console.error('Unauthorized, logging out...');
      // Perform any logout actions or redirect to login page
    }
    return Promise.reject(error);
  }
);

export default axiosInstance;

Step 2: Use the Axios Instance in Next.js Pages or Components

With the response interceptor set up, you can use the Axios instance in your Next.js pages or components as usual. The interceptor will automatically handle responses and errors based on your configuration.

// pages/index.js
import { useEffect, useState } from 'react';
import axiosInstance from '../lib/axiosInstance';

export default function Home() {
  const [data, setData] = useState(null);

  useEffect(() => {
    axiosInstance.get('/products/1') // Replace with your API endpoint
      .then(response => {
        setData(response.data);
      })
      .catch(error => {
        console.error('Error fetching data:', error);
      });
  }, []);

  return (
    <div>
      <h1>Data from API</h1>
      {data ? (
        <pre class="brush:php;toolbar:false">{JSON.stringify(data, null, 2)}
) : (

Loading...

)}
); }

How to implement Axios Request Interceptors in Next.js

By implementing response interceptors in your Next.js application, you can centralize response handling, improving code maintainability and application robustness. Whether it’s logging, transforming data, or managing errors, response interceptors provide a powerful way to manage HTTP responses efficiently.

Framework-Independent Alternative: Using Requestly

While Axios has powerful tools for processing HTTP requests within applications, integrating and managing interceptors directly within your codebase can be difficult and demand changes to your application’s architecture. Instead of depending on framework-specific solutions such as Axios interceptors, developers can use Requestly, a browser extension that modifies network requests and responses without requiring any changes to the application’s code. This method has various advantages over standard interceptors:

Simplifying Modifications with Requestly

Advantages of Using Requestly

Example Use Cases

Modify API Response

Requestly allows you to modify API responses. It provides a user-friendly interface for overriding the response body of API requests, allowing you to mimic different data scenarios that your frontend might encounter.

Insert/Inject Script

Insert/Inject Script Rule allows you to inject JavaScript and CSS into web pages as they load. This means you can modify the DOM, change styles, or even add new functionality without altering the source code directly. It’s important for testing hypotheses or debugging during the development and quality assurance process. Learn more about it here.

Replace Rule

Replace Rule enables you to replace a String in URL with another String. This feature is particularly useful for developers to swap the API endpoints from one environment to another or change something specific in the URL. Requests are matched with source condition, and find and replace are performed on those requests by redirecting to the resulting URL. Learn more about this rule here.

結論

このブログ投稿では、Next.js アプリケーションで Axios を使用してリクエストをインターセプトするという強力な概念を検討しました。これにより、開発者はアプリケーション内で HTTP リクエストとレスポンスをより詳細に制御できるようになります。認証トークンの追加、デバッグ目的でのリクエストのログ記録、エラーのグローバル処理など、Axios インターセプターは、多様な開発ニーズを満たす柔軟なソリューションを提供します。

このブログが気に入ったら、React で Axios インターセプターを実装する方法に関する他のブログもチェックしてください

以上がNext.js で Axios リクエスト インターセプターを実装する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

JavaScript css npm angular yarn String if for while require catch Error Logging Token using Interface JS console default dom this location http axios
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
前の記事:Flutter 状態管理の説明: 適切なアプローチの選択方法次の記事:Flutter 状態管理の説明: 適切なアプローチの選択方法

関連記事

続きを見る