catch 절에서 에러 던지기

  1. Promise.reject(error)
  2. throw error

에러 던지기2

new Promise((resolve, reject) => {
  resolve("OK");
}).then((result) => {
  throw new Error("에러 발생!"); // 프라미스가 거부됨
}).catch(alert); // Error: 에러 발생!

타입스크립트 에러처리

react-query와 axios 조합

  1. axios interceptor error response:

    axios.interceptors.response.use(
      (response) => {
        // 요청이 성공했을 때 실행될 로직
        return response;
      },
      (error) => { 
        // 에러 처리
        if (error.response) {
          // 서버 응답이 있을 때 (HTTP 상태 코드가 2xx가 아닌 경우)
          console.error('Server responded with error:', error.response.status);
          // 에러 메시지를 사용자에게 표시
        } else if (error.request) {
          // 요청이 보내졌지만 응답이 없을 때 (네트워크 오류 등)
          console.error('Request failed:', error.request);
          // 사용자에게 네트워크 연결 문제 메시지 표시
        } else {
          // 요청을 보내기 전에 오류가 발생했을 때
          console.error('Error before sending request:', error.message);
          // 사용자에게 오류 메시지 표시
        }
        return Promise.reject(error);
      }
    );
    
    
  2. react-query의 onError 콜백:

  3. 만약 인증관련 실패시 어디다가 에러를 작성해야할까??

    api.interceptors.response.use(
      (response) => {
        // 요청이 성공했을 때 실행될 로직
        return response;
      },
      async (error) => { 
        const originalRequest = error.config;
        if (error.response && error.response.status === 401 && !originalRequest._retry) {
          originalRequest._retry = true;
          try {
            // refreshToken을 요청하여 새로운 토큰을 발급받는 로직
            const newToken = await refreshToken();
            // 새로운 토큰을 axios의 디폴트 헤더에 설정
            api.defaults.headers.common['Authorization'] = `Bearer ${newToken}`;
            // 이전 요청을 재시도
            return api(originalRequest);
          } catch (refreshError) {
            // refreshToken 요청이 실패하면 로그아웃 등의 추가적인 작업 수행
            console.error('Failed to refresh token:', refreshError);
            // 사용자에게 에러 메시지 표시 등의 작업 수행
            // 예: 로그아웃 처리
          }
        }
        return Promise.reject(error);
      }
    );
    
    

프론트엔드에서 에러 발생 case