게다가 연구 초창기에 테스트를 위해서 주먹구구 사용하던 코드로 계속 개발을 진행하다 보니
아래와 같은 문제점이 있었음!
1) api 호출할 때마다 비효율적으로 axios 인스턴스를 생성
2) axios 마다 동일한 content-type , token와 같은 헤더값 처리
3) axios TIMEOUT 시간, base url 등에 대한 중복 처리
으으,,, 유지보수가 hell이 된다,,,,
하나를 변경하려면 모든 파일의 값을 수정해야하는,,,으으 😱😱😱
writeBoardContent(condition) {
var params = {
userNo: AuthService.getUserNo(),
boardTitle: condition.boardTitle,
context: condition.context,
};
return axios.post(base + "write", params, {
headers: AuthService.getAuthHeader(),
});
}
modifyBoardContent(condition) {
var params = {
boardNo:condition.boardNo,
boardTitle: condition.boardTitle,
context: condition.context,
};
return axios.put(base + "modify", params, {
headers: AuthService.getAuthHeader(),
});
}
}
axios interceptor 를 적용한 파일을 ApiContoller.js로 명했고,
axios 생성, 요청과 응답에 대한 전/후 처리 그리고 오류 처리가 가능함!
1) axios 생성
const instance =axios.create({
baseUrl: 데이터를 요청할 기본 주소,
timeout : 1000 (변경 가능)
};
2) axios request 처리
instance.interceptors.request.use(
function (config) {
config.headers["Content-Type"] = "application/json; charset=utf-8";
config.headers["Authorization"] = " 토큰 값";
return config;
},
function (error) {
console.log(error);
return Promise.reject(error);
}
);
3) axios response 처리
instance.interceptors.response.use(
function (response) {
console.log(response);
return response.data.data;
},
function (error) {
errorController(error);
}
);
4) 다른 파일에서 axios 호출
login(data) {
return ApiController({
url: "login",
method: "post",
data: data,
})
};
writeBoardContent(data) {
var params = {
userNo: AuthService.getUserNo(),
boardTitle: data.boardTitle,
context: data.context,
};
return ApiController({
url: base + "write",
method: "post",
data: params,
});
}
modifyBoardContent(data) {
var params = {
boardNo: data.boardNo,
boardTitle: data.boardTitle,
context: data.context,
userNo: AuthService.getUserNo()
};
return ApiController({
url: base + "modify",
method: "put",
data: params,
});
}
코드가 깔끔해졌네요~!