
//...중략
catch (error) {
if (axios.isAxiosError(error)) {
error.response?.status === 409 &&
setError('accountName', { message: '중복된 계정명입니다' })
}
}
axios interceptor을 이용해 request header 에 토큰을 담아 보내는 것처럼,
각종 응답에 관해서도 가로챈 뒤 추가 로직을 구현할 수 있다
//1. axios 인스턴스 생성
export const axiosInstance = axios.create({
baseURL: import.meta.env.VITE_BACK_SERVER,
// 이번 프로젝트에서는 vite을 이용하기 때문에 process.env가 아닌 import.meta.env로 환경변수 사용
})

서버에서 던지는 오류 내용은 에러 객체의
response☞data안에 들어있다
이 중 errorCode로 구분하고, errorMessage를 가져다 쓸 것
//1. 출력용 오류 코드로 구성된 배열
const errorCodes: string[] = [
'EMAIL_ALREADY_EXISTS',
'MEMBER_PASSWORD_INCORRECT',
'ACCOUNT_NAME_ALREADY_EXISTS',
'LOGIN_FAILED_PASSWORD_INCORRECT',
.....등등
]
axiosInstance.interceptors.response.use(
(response) => {
return response
},
async (error) => {
if (errorCodes.includes(error.response.data.errorCode)) {
toast.error(error.response?.data.errorMessage)
// 포함되어 있다면 alert으로 노출
}
)
axiosInstance.interceptors.response.use(
(response) => {
return response
},
async (error) => {
if (errorCodes.includes(error.response.data.errorCode)) {
toast.error(error.response?.data.errorMessage)
}
// 토큰 만료 시 처리
if (error.response.data.errorCode === 'TOKEN_TIME_OUT') {
await tokenRefresh() // refreshToken을 이용해 accessToken 재발급 요청 후 localStorage에 갱신 처리하는 함수
const TOKEN = getLocalStorage('accessToken')
if (!!TOKEN) error.config.headers['Authorization'] = `Bearer ${TOKEN}`
const response = await axios.request(error.config)
return response
}
return Promise.reject(error)
}
)
