HTTP status에 따른 에러 핸들링하기
fetchState에 errorMessage
status를 추가해준다.
export interface FetchState<T> {
isLoading: boolean;
isError: boolean;
isDataNull: boolean;
data: T | null;
errorMessage: string | null;
}
데이터를 불러오는 fetchData
함수에 status가 200인 경우에는 ok
로 반환하도록 수정했다.
import apiClient from '.';
export const fetchData = async <T>(
apiEndpoint: string,
params?: object,
): Promise<{ data: T; ok: boolean }> => {
const res = await apiClient.get<T>(apiEndpoint, { params });
const ok = res.status === 200;
return { data: res.data, ok };
};
이제 ok
인 경우와 그렇지 않은 경우에 따라 fetchState
를 업데이트 해주자.
if (res.ok) {
const fetchedData = res.data.themes;
setFetchState({
isLoading: false,
isError: false,
isDataNull: fetchedData.length === 0,
data: fetchedData,
errorMessage: null,
});
}
HTTP status
에 따라 에러 핸들링을 위해 에러 메세지를 반환하는 getErrorMessage
함수를 생성해주었다.
export const getErrorMessage = (error: unknown) => {
if (error instanceof Error) return error.message;
return String(error);
};
instaceof
는 객체의 프로토타입 체인에서 생성자의 prototype
프로퍼티가 존재하는지 확인한다. (반환 값은 boolean
이다.)
즉, error instanceof Error
는 발생한 error가 ErrorConstructor
에 속하는지 확인하는 것이다.
이제 에러 발생시 log를 보면 발생한 에러의 status에 따라 message를 뱉어내는 것을 볼 수 있다.
typeof vs instanceof
📝참고자료
Get a catch block error message with TypeScript
'FE > 코딩일기' 카테고리의 다른 글
🌳7월22일 TIL🎶 (1) | 2024.07.22 |
---|---|
🌳7월10일 TIL🎶 (0) | 2024.07.10 |
🌳7월9일 TIL🎶 (0) | 2024.07.09 |
🌳7월8일 TIL🎶 (0) | 2024.07.09 |
🌳7월5일 TIL🎶 (1) | 2024.07.05 |