상세 컨텐츠

본문 제목

Axios Interceptor

카테고리 없음

by Dal_pang 2023. 11. 28. 19:51

본문

Vue2 환경에서 작업을 하다가, 페이지 내 Axios 호출되는 곳에서 특정 문자를 변경해줘야 하는 문제가 있었다.
이를 위해서 SPA 페이지 내부에서 작업을 해줬었는데,
Axios Interceptor를 통해 한번에 처리할 수 있는 방법이 있었다.

Axios Interceptor의 메타 데이터 중, config.transformResponse를 활용하는 방식이다.
나는 특정 url을 포함하는 경우에만 해당 작업을 적용 시키기 위해서 다음과 같은 형식으로 작성했다.

이때 if절에서 response.config.transformResponse를 통해 데이터가 try/catch에 도달하기 전에 데이터 변환 작업을 해줄 수 있다.

Axios config에 대한 안내는 여기서 확인! https://axios-http.com/kr/docs/req_config

 

요청 Config | Axios Docs

요청 Config 다음은 요청을 만드는 데 사용할 수 있는 config 옵션들 입니다. 오직 url만 필수입니다. method를 지정하지 않으면 GET방식이 기본값 입니다. { url: '/user', method: 'get', baseURL: 'https://some-domain.

axios-http.com

필요에 의해 transformResponse만 확인했지만, 다른 여러 config옵션들이 있어 확인해 보면 많은 도움이 될 것 같다.

export default function axiosInterceptor() {
	axios.interceptors.request.use(
    	//....request 처리 구문
    );

    axios.interceptors.response.use(
        function(response) {
            const config = response.config;


            if (config.url.includes('url포함문자') 
            && config.transformResponse 
            && config.transformResponse.length > 0) {
                response.data = changeDataFormat(response.data.data);
            }

            return response;
    }, function(err) {
            //에러 처리 구문...
        }
    );
}


//동일 페이지 내 method 작성시
function changeDataFormat(data) {
    //...function 내용
}

 

같은 페이지 내의 하단에 function을 추가해 실행해 주게 됐으나, 다른 페이지에서 작업 후에 import 해서 사용도 가능했다.

import importedComponent from "../../components/element/importedComponent";

	//... 생략
	response.data = importedComponent.methods.changeDataformat(config.data);
    //... 생략

 

이 말이 너무 생각나는 경험이다.
Work Wiser, not Harder 😅

728x90