커스텀 에러 처리
This commit is contained in:
parent
c730ea6cd3
commit
1fcff89176
@ -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;
|
||||
|
||||
@ -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>
|
||||
|
||||
Loading…
Reference in New Issue
Block a user