맞춤형 인스턴스로 Axios를 사용할 때 기본 설정(base configuration)을 미리 정해두는 방법이야.
반복적으로 작성해야 할 옵션(예: 기본 URL, 공통 헤더)을 한 번만 정의하고 재사용 가능해!
// src > axios > api.js
import axios from 'axios';
// Axios Custom Instance 생성
const apiClient = axios.create({
baseURL: 'https://api.example.com', // 기본 URL
timeout: 5000, // 요청 제한 시간
headers: {
'Content-Type': 'application/json', // 공통 헤더
Authorization: 'Bearer YOUR_TOKEN_HERE', // 토큰 등 인증 정보
},
});
// Custom Instance 사용
apiClient.get('/users')
.then((response) => {
console.log('사용자 데이터:', response.data);
})
.catch((error) => {
console.error('오류 발생:', error);
});
Axios의 요청(Request)과 응답(Response)을 중간에 가로채 추가 작업을 수행하는 기능이야.
예를 들어, 요청 전에 인증 토큰을 추가하거나, 응답 데이터를 가공할 수 있어!
1️⃣ 요청 인터셉터 (Request Interceptor)
apiClient.interceptors.request.use(
(config) => {
// 요청 전에 실행되는 로직
console.log('요청 정보:', config);
config.headers.Authorization = `Bearer NEW_TOKEN_HERE`; // 토큰 추가
return config; // 수정된 요청 설정 반환
},
(error) => {
// 요청 오류 처리
console.error('요청 오류:', error);
return Promise.reject(error);
}
);
2️⃣ 응답 인터셉터 (Response Interceptor)
apiClient.interceptors.response.use(
(response) => {
// 응답 성공 시 실행되는 로직
console.log('응답 데이터:', response.data);
return response; // 수정된 응답 반환
},
(error) => {
// 응답 오류 처리
console.error('응답 오류:', error);
if (error.response && error.response.status === 401) {
console.log('인증 오류 발생. 로그인 페이지로 이동합니다.');
}
return Promise.reject(error);
}
);
import axios from 'axios';
// Custom Instance 생성
const apiClient = axios.create({
baseURL: 'https://api.example.com',
timeout: 5000,
});
// 요청 인터셉터 추가
apiClient.interceptors.request.use(
(config) => {
config.headers.Authorization = `Bearer YOUR_TOKEN_HERE`;
console.log('요청 정보:', config);
return config;
},
(error) => {
console.error('요청 오류:', error);
return Promise.reject(error);
}
);
// 응답 인터셉터 추가
apiClient.interceptors.response.use(
(response) => {
console.log('응답 데이터:', response.data);
return response;
},
(error) => {
console.error('응답 오류:', error);
if (error.response && error.response.status === 401) {
alert('로그인이 필요합니다!');
}
return Promise.reject(error);
}
);
// Custom Instance 사용
apiClient.get('/users')
.then((response) => {
console.log('사용자 데이터:', response.data);
})
.catch((error) => {
console.error('오류 발생:', error);
});