-
[Vue] interceptors(인터셉터) 구현으로 axios 통신 공통으로 관리하기쬬의 Vue 2022. 8. 17. 18:21반응형
axios 문서 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
axios를 활용한 통신이 많아지다보면 통신 전처리, 후처리에 대한 고민이 쌓여만간다..
interceptors는 원래는 요청이 주고받을때 통신 틈새에 액션을 취하는 역할이지만 ㅎㅎ 작업을 하다보니 interceptors 를 에러 핸들러에 이용하는 편이다. (굉장히 편리하다 !! 정말 유용하게 쓰는중)
물론 이런 역할 이외에도 다양하게 활용이 가능하다
src/api/index.js
import axios from "axios"; import { setInterceptors } from "./interceptors"; function createAxiosService() { const axiosService = axios.create({ baseURL: process.env.VUE_APP_API_URL, }); return setInterceptors(axiosService); } //axiosService로 사용이 가능하다 export const axiosService = createAxiosService();
src/api/interceptors.js
import store from "@/store"; import route from "@/router"; export function setInterceptors(axiosService) { axiosService.interceptors.request.use( function (config) { config.headers.Authorization = `Bearer ${store.state.account.token}`; // 요청을 보내기 전에 처리 return config; }, function (error) { // 요청이 잘못되었을 때 에러가 컴포넌트 단으로 오기 전에 처리 return Promise.reject(error); } ); axiosService.interceptors.response.use( function (response) { // 응답을 받기 전에 처리 return response; }, function (error) { // 응답이 에러인 경우에 미리 전처리할 수 있다. if (error.response.status === 401) { if (route.app._route.name !== "LoginView") { location.reload(); } else { store.commit("controller/setMsg", "로그인정보를 다시 확인해주세요"); } } else if (error.response.status === 405) { store.commit("controller/setMsg", "서버오류! 관리자에게 문의하세요"); return Promise.reject(error); } ); return axiosService; }
src/components/test.vue
... <script> import { axiosService } from "@/api/index"; ... methods: { autoSetKeyword(val) { axiosService(`axios/url/test`) .then((res) => { console.log('통신') }) }, } </script>
반응형'쬬의 Vue' 카테고리의 다른 글
[Vue] mycure/vue-wysiwyg 기본편집기 활용하기 (default 값 넣기) (0) 2022.09.20 [Vue] vue-cli-serve production 빌드 시 스타일 문제 해결과정 (0) 2022.09.16 [Vue] 모바일/웹 분기설정 정규식예제 (0) 2022.08.17 [Vue] vue-lottie 활용해 json 파일 로딩화면 구현하기 (0) 2022.08.17 [Vue] 앱과 웹뷰 통신 (0) 2022.08.17