ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • axios의 interceptors 기능 사용하기
    React 2022. 11. 11. 22:28

    🍎 Axios나 ky, got과 같은 Promise 기반 HTTP 라이브러리에서는 interceptors 기능을 제공한다.

    🍏 interceptors를 설정하여 매번 API가 처리되기 전에, 요청이나 응답을 가로채 그 사이에 함수를 실행시킬 수 있다. 

     

    예를 들면, 요청 전에 인증 토큰을 가져와 설정해두면, 매번 요청할 때 마다 인증 설정을 해야하는 번거로움을 줄일 수 있다.

        axios.interceptors.response.use(
          response => response, // 성공
          error => {
            const {
              config, // 기존의 요청
              response: {status},
            } = error;
            console.log("status", status);
            return Promise.reject(error); 
            // return axios(config); // 실패시 다시 요청을 보낸다.
          },
        );

     

    • 설정해둔 인터셉터는 요청/응답이 있을 때마다 호출되어 실행된다.
    • axios.interceptors.request를 통해서 요청이 있을 때 실행될 함수를 설정한다.
    • axios.interceptors.response를 통해 응답이 있을 때 실행할 함수를 설정한다.
    • 응답과 요청 모두 .use를 통해 설정될 수 있는데, 첫 번째 인자로 실행될 함수를 전달하고, 두 번째 인자로 오류가 발생하였을 때 실행할 함수를 설정한다.
    • interceptors를 사용하여 중복되는 코드를 줄일 수 있다.
    • 만약 매번 요청 전에 localstorage에서 토큰을 꺼내 headers.authorization에 설정해야 한다면, axios.interceptors.request를 사용하여 설정할 수 있다.
    • 만약, 응답에 에러가 담겨왔을 때 다시 요청을 보내고자 한다면 axios.interceptors.response를 사용하여 다시 요청을 보낼 수 있다.
    • 필요 없어진 인터셉터는 axios.interceptors.request.eject나 axios.interceptors.response.eject를 통해 제거할 수 있다.
    • axios.create()로 만든 커스텀 인스턴스에도 인터셉터는 적용이 가능하다.
    import axios from "axios";
    
    const apiCall = axios.create();
    
    apiCall.interceptors.request.use(
      (request) => {
        // throw Error("REQUEST ERROR !!!"); // 에러 테스트
        console.log("request OK");
        return request;
      },
      (error) => {
        console.log("request ERROR", error);
        return Promise.reject(error);
      }
    );
    
    apiCall.interceptors.response.use(
      (response) => {
        console.log("response OK");
        return response;
      },
      (error) => {
        const { config, response } = error;
        console.log("response ERROR", config, "\n", response);
        return Promise.reject(error);
      }
    );
    
    export default apiCall;

     

    공식 문서 : https://axios-http.com/kr/docs/interceptors

     

    인터셉터 | Axios Docs

    인터셉터 then 또는 catch로 처리되기 전에 요청과 응답을 가로챌수 있습니다. axios.interceptors.request.use(function (config) { return config; }, function (error) { return Promise.reject(error); }); axios.interceptors.response.use(f

    axios-http.com

     

Designed by Tistory.