Axios는 HTTP 요청을 서버에 더 쉽게 보낼 수 있도록 해주는 널리 사용되는 JavaScript 라이브러리입니다. 눈에 띄는 기능 중 하나는 앱이 요청과 응답을 포착할 수 있게 해주는 인터셉터입니다. 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!