// 创建 axios 实例
let myRequest = axios.create({
responseType: ‘json‘,
// validateStatus 是axois的内置方法,在axios包的index.d.ts声明文件中做了声明
validateStatus(status) {
// 200 外的状态码都认定为失败
return status === 200;
}
});
// 请求拦截, 一般用于在请求头中添加token信息
myRequest.interceptors.request.use(config => {
const token = sessionStorage.getItem(‘token‘)
if (token ) { //如果 token 存在,则每个http header都加上token
config.headers.authorization = token //请求头加上token
}
return config
},error=>{
return Promise.reject(error)
})
// 响应拦截
myRequest.interceptors.response.use(response=>{
return response;
},error=>{
// 可对一般的http状态码进行拦截处理,返回友好的用户提示
switch (error.response.status) {
case 404:
ElementUI.Notification({
title: ‘系统提示‘,
message: ‘很抱歉,资源未找到‘,
type: ‘info‘
});
break;
case 403:
break;
case 401:
ElementUI.MessageBox.confirm(‘登录信息已失效,请重新登陆!‘, ‘提示‘, {
confirmButtonText: ‘确定‘,
showCancelButton: false,
closeOnClickModal: false,
type: ‘warning‘,
showClose: false
}).then(() => {
// 清空session中保存的所有值
sessionStorage.clear();
router.push("/");
location.reload();
});
break;
default:
ElementUI.Notification({
title: ‘系统提示‘,
message: errorMessage,
type: ‘info‘
});
break;
}
return Promise.reject(error);
})
// 对 axios 的各种请求方式,进行二次封装
const request = {
// 与后台商定后,统一项目中的入参格式
post(url, params) {
// 格式化 请求入参
params = formatParams(params);
return myRequest.post(url, params, {
headers: {
‘Content-Type‘: ‘application/json‘
}
});
},
// 因为 axios 中post和get的调用方式不一样,此处对get的封装,主要为了在项目中使用时,get和post写法一样,更加方便
get(url, params) {
let _params;
if (Object.is(params, undefined)) {
_params = ‘‘;
} else {
_params = ‘?‘;
for (let key in params) {
if (params.hasOwnProperty(key) && params[key] !== null) {
_params += `${key}=${encodeURIComponent(params[key])}&`;
}
}
}
return myRequest.get(`${url}${_params}`);
}
}
function formatParams(params) {
return {
‘ROOT‘: {
‘HEAD‘: {},
‘BODY‘: params
}
};
}
export default request;
原文:https://www.cnblogs.com/upward-lalala/p/14774257.html