Axios 封装
axios 封装
import axios from 'axios';
import Qs from 'qs'; //路由工具库
import { GLOBAL } from './config'; //全局配置单例
import {
getToken,
getRemoteAddress
} from './utils'; //工具函数
const baseURL = process.env.BASE_API,
axios.default.timeout = 60 * 1000; //请求等待一分钟
axios.defaults.withCredentials = true; //是否允许传token,存在跨域问题
axios.interceptors.request.use((config) => {
//添加一些配置,或给headers塞入一些配置
return config;
}, error => {
//对错误请求拦截
});
axios.interceptors.response.use((response) => {
const {data: res} = response;
if(res.code != 200) {
//错误处理,单点登录跳转等
}
return response
}, err => {
//对响应错误的统一处理
return Promise.reject(err);
});
const dealWithParams: (params) => {
let res = params;
for(let item in resParams) {
if(res[item] === '' || res[item] == null) {
delete res[item];
}
}
return res || {};
}
const getParamConfigUrl = (params, isEncode = false) => {
if(!params || Object.keys(params).length = 0) return '';
let requestBodyStr = '';
const paramObject = dealWithParams(params);
Object.keys(paramObject).forEach((key, index) => {
requestBodyStr = requestBodyStr.concat(`${index > 0 ? '&' : ''}${key}=${paramObject[key]}`);
});
return isEncode ? `?${requestBodyStr}` : encodeURI(`?${requestBodyStr}`)
}
const contentType = {
'form-file': 'multipart/form-data',
'from-common': 'application/x-www-from-urlencoded',
'json': 'application/json;charset=UTF-8'
}
export default requestAPI = {
success_resp: (response, successCallback, errorCallback) => {
//...
}
error_resp: (err, errorCallback) => {
//...
}
get: ({url, params, successCallback, errorCallback, needRmote, stateConfig}) => {
let ajaxParams = dealWithParams(params)
const headers = {
'Content-Type': contentType['json'],
}
return axios({
method: 'get',
url: `${needRemote ? '前缀' : '另外的配置'}`,
params: ajaxParams,
headers: headers
}).then((response) => {
return requestAPI.success_resp(response, successCallback, errorCallback )
}, (error) => {
return requestAPI.error_resp(error, errorCallback);
})
}
post: ({url, params, successCallback, errorCallback, contentType, needRmote, stateConfig}) {
//...
}
delete:({url, params, successCallback, errorCallback, contentData,needRmote, stateConfig}) {
//...
}
put:({url, params, successCallback, errorCallback, contentType , needRmote, stateConfig}) {
//...
}
download: ({url, params, successCallback, errorCallback, needRmote, stateConfig}) => {
let ajaxParams = Qs.stringify(dealWithParams(params));
const headers = {
'Content-Type': contentType['json'],
}
return axios({
method: 'get',
url: `${needRemote ? '前缀' : '另外的配置'}${url}?${ajaxParams}`,
responseType: 'blob',
headers: headers
}).then((response) => {
return requestAPI.success_resp(response, successCallback, errorCallback)
}, (error) => {
return requestAPI.error_resp(error, errorCallback);
})
}
blobDownloadFile = ({data, fileName, isBrowserDownload = true}) => {
if(! data) return ;
let url = ''
if(isBrowserDownload && typeof data === 'string') {
url = data;
}else {
url = window.URL.createObjectURL(data);
}
return new Promise((reslove, reject) => {
try {
let link = document.createElement('a');
link.style.display = 'none';
link.href = url;
link.setAttribute('download', fileName)
document.body.appendChild(link);
link.click();
} catch (err) {
reject(err);
}
URL.revokeObjectURL(link.href);
document.body.removeChild(link);
resolve();
})
}
}