ホームページ >ウェブフロントエンド >jsチュートリアル >Next.js で Axios リクエスト インターセプターを実装する方法
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 リクエスト インターセプターを実装する方法は次のとおりです。
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;
これまでに行ったことの概要は次のとおりです:
リクエスト インターセプターを設定すると、通常どおり 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...
)}必要に応じて、リクエスト インターセプターをカスタマイズして、他のアクションを実行できます。たとえば、各リクエストの詳細をログに記録したい場合があります:
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); } );
この設定では、各リクエストの詳細がコンソールに記録されるため、デバッグに役立ちます。
Next.js アプリケーションにリクエスト インターセプターを実装すると、すべてのリクエストが送信される前に一貫して変更または拡張されるようになり、コードの保守性と機能性が向上します。
リクエスト インターセプターを使用して発信リクエストを変更できるのと同様に、Axios のレスポンス インターセプターを使用すると、レスポンスがアプリケーション コードに到達する前にグローバルにレスポンスを管理できます。これは、エラー処理、応答変換、ロギングなどのタスクに特に役立ちます。 Axios を使用して Next.js アプリケーションにレスポンス インターセプターを実装する方法を見てみましょう。
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;
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...
)}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.
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:
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 サイトの他の関連記事を参照してください。