๐ŸŽจFrontEnd/React

๋ฆฌ์•กํŠธ axios instance & interceptor/ axios ์—๋Ÿฌ ํ•ธ๋“ค๋ง

IOTrue 2023. 2. 5. 19:53

๐Ÿ˜Ž ๋ฆฌ์•กํŠธ axios instance & interceptor/  axios ์—๋Ÿฌ ํ•ธ๋“ค๋ง

์ด๋ฒˆ ํ”„๋กœ์ ํŠธ ์ฝ”๋“œ๋ฅผ ์˜ˆ์‹œ๋กœ ์‚ฌ์šฉํ•˜๊ฒ ๋‹ค

โœ… axios instance (์ธ์Šคํ„ด์Šค)

axios instance๋Š”

axios๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ ๊ณตํ†ต์œผ๋กœ ๋“ค์–ด๊ฐ€๋Š” ๊ธฐ๋ณธ ์ฝ”๋“œ๋ฅผ ๋ชจ๋“ˆํ™” ํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค.

import axios from "axios";

export const api = axios.create({
  baseURL: "๊ธฐ๋ณธ์œผ๋กœ ์ง€์ •ํ•  ์„œ๋ฒ„ url",
  timeout: 1000, //์š”์ฒญ์ด ํ•ด๋‹น ์„ค์ • ์‹œ๊ฐ„๋ณด๋‹ค ์ง€์—ฐ๋  ๊ฒฝ์šฐ ์š”์ฒญ์€ ์ค‘๋‹จ๋˜๋ฉฐ, catch๋กœ ์—๋Ÿฌ๊ฐ€ ์ „๋‹ฌ๋œ๋‹ค
  headers: {
    "content-type": "application/json;charset=UTF-8",
    //"Accept": "application/json," ์ฃผ์„ ์ด์œ  : ๊ธฐ๋ณธ ๊ฐ’์ด application/json ์ด๋‹ค.
  },
});

 

โœ… axios interceptor (์ธํ„ฐ์…‰ํ„ฐ)

axios interceptor๋Š”

axios๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ API ์š”์ฒญ๊ณผ ์‘๋‹ต์— ๋Œ€ํ•œ ์—๋Ÿฌ ํ•ธ๋“ค๋ง ๋ฐ ๊ณตํ†ต ์ž‘์—…์„ ๋ชจ๋“ˆํ™” ํ•  ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค.

api.interceptors.request.use( //์š”์ฒญ ์ฒ˜๋ฆฌ
  function (config) {
    const token = localStorage.getItem("token");
    const refreshToken = localStorage.getItem("refreshToken");
    try {
      if (token && refreshToken) { //ํ† ํฐ์ด ์žˆ๋‹ค๋ฉด headers์— ํ† ํฐ ์ถ”๊ฐ€
        config.headers.authorization = token;
        config.headers.refreshauthorization = refreshToken;
      }
      return config;
    } catch (error) {
      alert("์„œ๋ฒ„ ์š”์ฒญ ์—๋Ÿฌ! ๋‹ค์‹œ ์‹œ๋„ํ•ด์ฃผ์„ธ์š”!");
    }
    return config;
  },
  function (error) {
    return Promise.reject(error);
  }
);

api.interceptors.response.use( //์‘๋‹ต ์ฒ˜๋ฆฌ
  function (response) {
    return response;
  },
  function (error) {
    alert("์„œ๋ฒ„ ์‘๋‹ต ์—๋Ÿฌ! ๋‹ค์‹œ ์‹œ๋„ํ•ด์ฃผ์„ธ์š”!");
    return Promise.reject(error);
  }
);

 

โœ… axios instance, interceptor ์ ์šฉ

import { api } from "../../shared/api";

export const __loginUser = createAsyncThunk(
  "loginUser",
  async (payload, thunkAPI) => {
    try {
    	//์•„๋ž˜ api.post ๋ถ€๋ถ„์ด instance๋ฅผ ์‚ฌ์šฉํ•œ ๋ถ€๋ถ„์ด๋‹ค
      const data = await api.post(`auth/local`, payload);
      
      //๊ณตํ†ต ์š”์ฒญ,์‘๋‹ต ์ฒ˜๋ฆฌ๊ฐ€ ์•„๋‹Œ ๊ฐœ๋ณ„ ์ฒ˜๋ฆฌ๋Š” ๋”ฐ๋กœ ํ•ด์ค˜์•ผ ํ•œ๋‹ค
      if (data.status === 201) { //๋กœ๊ทธ์ธ ์ž‘์—… ๊ฐœ๋ณ„ ์ฒ˜๋ฆฌ
        const accessToken = data.data.token.AccessToken;
        const refreshToken = data.data.token.RefreshToken;
        const nickName = data.data.nickname;

        if(accessToken && refreshToken && nickName){ //ํ† ํฐ & ๋‹‰๋„ค์ž„์ด ์žˆ๋‹ค๋ฉด
          localStorage.setItem("token", accessToken);
          localStorage.setItem("refreshToken", refreshToken);
          localStorage.setItem("nickName", nickName);
          
          alert("๋กœ๊ทธ์ธ ์„ฑ๊ณต!!!");
          return window.location.assign("/main");
        }
      }
      return thunkAPI.fulfillWithValue(data);
      
    } catch (error) {
      alert("๋‹ค์‹œ ํ™•์ธํ•ด์ฃผ์„ธ์š”.");
      return thunkAPI.rejectWithValue(error);
    }
  }
);

 

 

 

์ฐธ๊ณ 

 

์ธ์Šคํ„ด์Šค : https://axios-http.com/kr/docs/instance

์ธํ„ฐ์…‰ํ„ฐ : https://axios-http.com/kr/docs/interceptors