
axios.create 메서드를 사용해 기본 설정이 포함된 인스턴스를 생성interceptors를 쉽게 관리할 수 있다.import axios from 'axios';
export const axiosInstance = axios.create({
baseURL: 'http://localhost:8080',
timeout: 1000 * 60 * 3,
headers: { "Content-Type": "application/json" },
withCredentials: true, // 인증정보(쿠키,인증 header)를 포함시킬지 여부
});
즉, 모든 요청이나 응답을 중간에 가로채어 추가 로직을 실행할 수 있게 해줌
요청, 응답을 받을 때 인가인증을 위해 해줘야하는 것들
- 요청 시 header에 accessToken 담아서 보내주기
- accessToken이 만료면 refreshToken을 이용해 재발급 후 재요청
axiosInstance.interceptors.request.use(
(config) => {
return config;
},
(error) => {
console.log(error);
return Promise.reject(error);
},
);
axiosInstance.interceptors.response.use(
(config) => {
return config;
},
(error) => {
return Promise.reject(error);
},
);
export const apiClient = async (url: string, data: any) => {
return await axiosInstance
.post(url, data)
.then((res) => {
if (res.status === 200) {
return res;
} else {
return undefined;
}
})
.catch((e) => {
console.error(e);
});
};
➡️ 사용 예시
const res = await apiPostClient('url',data);
export const apiGetClient = async (url: string): Promise<any> => {
return await axiosInstance
.get(url)
.then((res) => {
if (res.status === 200) {
return res;
} else {
return undefined;
}
})
.catch((e) => {
console.error(e);
});
};
➡️ 사용 예시
const project = async () => {
const res = await apiGetClient('url'
if (res) {
if (res.status === 200) {
const data: any = res.data.data
setData(data)
}
}
};