커스텀 에러 처리

This commit is contained in:
yoon 2025-03-18 10:28:30 +09:00
parent c730ea6cd3
commit 1fcff89176
2 changed files with 49 additions and 19 deletions

View File

@ -40,7 +40,31 @@ $api.interceptors.response.use(
function (response) {
const loadingStore = useLoadingStore();
loadingStore.stopLoading();
// 2xx 범위의 응답 처리
// 로그인 실패, 커스텀 에러 응답 처리 (status는 200 success가 false인 경우)
if (response.data && response.data.success === false) {
const toastStore = useToastStore();
const errorCode = response.data.code;
const errorMessage = response.data.message || '알 수 없는 오류가 발생했습니다.';
// 로그인 요청일 경우 (헤더에 isLogin이 true로 설정된 경우)
if (response.config.headers && response.config.headers.isLogin) {
return response;
}
// 서버에서 보낸 메시지 사용
toastStore.onToast(errorMessage, 'e');
// 특정 에러 코드에 대한 추가 처리만 수행
if (errorCode === 'USER_NOT_FOUND') {
router.push('/login');
}
// 오류 응답 반환
return response;
}
// 일반 성공 응답 처리
return response;
},
function (error) {
@ -48,17 +72,24 @@ $api.interceptors.response.use(
loadingStore.stopLoading();
const toastStore = useToastStore();
// 오류 응답 처리
if (error.response) {
// 로그인 요청 별도 처리 (헤더에 isLogin이 true로 설정된 경우)
if (error.config && error.config.headers && error.config.headers.isLogin) {
// 로그인 페이지 오류 토스트 메시지 표시 X
return Promise.reject(error);
}
// 에러 응답에 커스텀 메시지가 포함되어 있다면 해당 메시지 사용
if (error.response && error.response.data && error.response.data.message) {
toastStore.onToast(error.response.data.message, 'e');
} else if (error.response) {
// 기본 HTTP 에러 처리
switch (error.response.status) {
case 400:
toastStore.onToast('잘못된 요청입니다.', 'e');
router.push('/error/400'); // 🚀 400 에러 발생 시 자동 이동
router.push('/error/400');
break;
case 401:
if (!error.config.headers.isLogin) {
// toastStore.onToast('인증이 필요합니다.', 'e');
}
toastStore.onToast('인증이 필요합니다.', 'e');
router.push('/login');
break;
case 403:
@ -76,10 +107,8 @@ $api.interceptors.response.use(
toastStore.onToast('알 수 없는 오류가 발생했습니다.', 'e');
}
} else if (error.request) {
// 요청이 전송되었으나 응답을 받지 못한 경우
toastStore.onToast('서버와 통신할 수 없습니다.', 'e');
} else {
// 요청 설정 중에 오류가 발생한 경우
toastStore.onToast('요청 중 오류가 발생했습니다.', 'e');
}
@ -87,4 +116,5 @@ $api.interceptors.response.use(
},
);
export default $api;

View File

@ -71,17 +71,17 @@
remember: remember.value,
}, { headers: { isLogin: true } })
.then(async res => {
if (res.status === 200) {
// (success false )
if (res.data && res.data.success === false) {
//
errorMessage.value = res.data.message || '로그인에 실패했습니다.';
return;
}
//
userStore.userInfo();
await nextTick();
router.push('/')
}
}).catch(error => {
if (error.response) {
error.config.isLoginRequest = true;
errorMessage.value = error.response.data.message;
console.clear();
}
});
router.push('/');
})
};
</script>