import axios from 'axios'; import { testProp } from './config'; import tokenSvc from '@/common/token-service'; import { consts } from './config'; const config = { //baseURL: 'http://localhost:7070', // baseURL: apiBaseUrl, headers: { 'X-Requested-With': 'XMLHttpRequest' }, timeout: 120000 // timeout은 120초로 설정 }; const httpClient = axios.create(config); const authInterceptor = config => { // frontend와 backend의 origin이 다른 경우 // devServer.proxy 설정을 하던지 baseURL과 withCredentials 설정을 해야 한다. // cookie, header 등에 자격정보 설정이 필요한 api는 true 설정으로 호출해야 하고 // 자격정보 설정이 필요없는 api는 withCredentials=false 설정으로 호출해야 한다. // config.withCredentials = !config.url.startsWith('/api/public/'); console.log("Test Url : "+ config.url); /*if(config.url == '/api/auth/login'){ config.baseURL = "http://localhost:3000"; }*/ return config; }; const tokenInterceptor = config => { if(tokenSvc.getAuthorization(consts.tokenPart1) != null){ config.headers.Authorization = tokenSvc.getAuthorization(consts.tokenPart1); //console.log("getToken : "+config.headers.Authorization); //config.headers.Authorization = tokenSvc.getToken(); } return config; } const loggerInterceptor = config => { //console.log('testProp:', testProp); //console.log('request url:', config.url, 'params:', config.data); return config; }; let loadOverlap = []; const loadingLayer = (type, config) => { /* get: httpClient.get(url, { params: { ... }, headers: {"show-layer": "Yes"} }) // in 2nd property post: httpClient.post(url, params, { headers: {"show-layer": "Yes"} }) // 3rd property */ if (config.headers['Show-Layer'] == 'Yes') { if (type) { loadOverlap.push('add'); } else { loadOverlap.pop(); } if (loadOverlap.length > 0) { document.querySelector('html > body').style.overflow = 'hidden'; // 스크롤 block document.getElementsByClassName('loading_layer')[0].style.display = 'block'; } else { document.querySelector('html > body').style.removeProperty('overflow'); // 스크롤 allow document.getElementsByClassName('loading_layer')[0].style.display = 'none'; } } }; /*const loadingLayerInterceptor = config => { loadingLayer(true, config); return config; };*/ /** Adding the request interceptors */ httpClient.interceptors.request.use(authInterceptor); httpClient.interceptors.request.use(tokenInterceptor); httpClient.interceptors.request.use(loggerInterceptor); //httpClient.interceptors.request.use(loadingLayerInterceptor); /** Adding the response interceptors */ httpClient.interceptors.response.use( response => { //loadingLayer(false, response.config); console.log('response status:', response.status, 'data:', response.data); return response; }, error => { console.log(error); if (error.response != undefined && error.response != null) loadingLayer(false, error.response.config); else loadingLayer(false, error.config); if (error.code === 'ECONNABORTED') { alert('서비스가 지연되고 있습니다. 잠시 후 확인하시고 다시 시도해주세요.'); return Promise.reject(error); } else if(error.response.status == 401){ alert('세션이 만료되었습니다.'); tokenSvc.removeToken(); window.top.location.href = '/login'; } else if (error.response.status == 418) { }else if (error.response.status == 500) { if (error.response.data != null && error.response.data.message == '511 NETWORK_AUTHENTICATION_REQUIRED') { alert('웹템플릿 IP가 브랜드포털에 등록이 필요합니다. 기술지원에 문의해주세요.'); return Promise.reject(error); } else { tokenSvc.removeToken(); window.top.location.href = '/login'; } } else if (error.response.status == 511) { alert('웹템플릿 IP가 브랜드포털에 등록이 필요합니다. 기술지원에 문의해주세요.'); return Promise.reject(error); } else if (error.message == 'Network Error') { alert('네트워크 오류가 발생했습니다. 잠시 후 다시 시도해주세요.'); return Promise.reject(error); } else { alert("else"); console.log('response error:', error); return Promise.reject(error); } } ); export default httpClient;