-
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
'React' 카테고리의 다른 글
간단하게 react-hook-form과 yup 사용하기 (0) 2022.11.18 ContextAPI 사용하기 (1) 2022.11.14 useEffect의 Clean-up 함수 (1) 2022.11.10 코드 깔끔하게 작성하기 (리액트, Styled-Components) (0) 2022.11.10 SuperAgent로 API 호출하기 (0) 2022.11.10