Notice
Recent Posts
Recent Comments
«   2024/07   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
Tags more
Archives
Today
Total
관리 메뉴

HYEWON JUNG의 개발일지

axios interceptor 본문

React

axios interceptor

혜won 2023. 11. 29. 18:45

인터셉터는 왜 필요할까?

우선 내가 이해한 것은 중복되는 코드를 수정해야 할 때 하나의 변수로 만들어둔다면 훨씬 수정이 용이해진다.  단순하게 편하니까 사용한다..?

 

axios interceptor는 코드 흐름을 가로 채서 관여하는 두 상황이 있는데 

(1) 요청(request)이 처리되기 전( = http request가 서버에 전달되기 전)
(2) 응답(response)의 then(=성공) 또는 catch(=실패)가 처리되기 전

이 있다. 

 

그래서 주로 쓰이는 곳은 

  • 요청 헤더 추가
  • 인증 관리
  • 로그 관련 로직 삽입
  • 에러 핸들링

라고 한다.

사용법

src 폴더에 axios 폴더를 만들어준다.  그리고 axios 폴더 안에  api.js를 생성해서  instance를 만들어 줄 것이다.

import axios from "axios";

const instance = axios.create({
 
});

export default instance;

그리고  .env 파일을 root 경로(가장상위폴더)에 생성한 후  데이터 url을 변수 선언 해준다. 

REACT_APP_SERVER_URL = http://localhost:4000

그리고 app.jsx에서 

axios.get(`${process.env.REACT_APP_SERVER_URL}/todos`)

url을 이렇게 수정해준다. 

 

그리고 api.js로 돌아가

baseURL을 지정해 줄 것이다. 

const instance = axios.create({
  baseURL: process.env.REACT_APP_SERVER_URL,
});

그렇게 되면  아까 app.jsx에서 수정했던 url들은 

import api from "./axios/api";

api.get(`/todos`)

api.js를 import 해와서 적용하면 이렇게 까지 간결하게 작성할 수 있다. 

 

그리고 흐름을 가로채는 순간을 직접적으로 체크 해보자

instance.interceptors.request.use(
  //요청을 보내기 전 수행되는 함수
  function (config) {
    console.log("인터셉터 요청 성공");
    return config;
  },
  //오류 요청을 보내기 전 수행되는 함수
  function (error) {
    console.log("인터셉터 요청 오류");
    return Promise.reject(error);
  }
);

instance.interceptors.response.use(
  //응답을 내보내기 전 수행되는 함수
  function (response) {
    console.log("인터셉터 응답 받았습니다.");
    return response;
  },
  //오류 응답을 내보내기 전 수행되는 함수
  function (error) {
    console.log("인테셉터 응답 오류 발생");
    return Promise.reject(error);
  }
);

instance.interceptor.(request/ response).use()는 두 함수를 받는데  정상적인 요청/응답과 오류의 담은 함수를 받고 있다.

이때 오류를 내보내기 전 수행되는 함수는 꼭 Promise.reject()로 반환해야 한다. 

'React' 카테고리의 다른 글

React -Query  (0) 2023.12.21
타입스크립트 -1  (0) 2023.12.13
json server  (0) 2023.11.29
axios get post delete patch  (0) 2023.11.29
redux toolkit  (1) 2023.11.28