解决一个场景,在请求前,后做一些统一的事情
//添加token
axios.interceptors.request.use(
config => {
config.headers['token'] = 'xxxx'
return config
},
error => {
return Promise.reject(error)
}
)
//统一异常处理
axios.interceptors.response.use(
response => {
const res = response.data
if (res.code !== 200) {
Message({
message: res.msg || '出错啦!',
type: 'error',
duration: 5 * 1000,
showClose: true
})
return Promise.reject(res.msg || 'error')
} else {
return res
}
},
error => {
Message({
message: '没事,只是服务器出错啦!',
type: 'error',
duration: 5 * 1000,
showClose: true
})
return Promise.reject(error)
}
)
复制代码
Object.defineProperty(this, attr, {
get: getterFactory(attr),
set: setterFactory(attr),
enumerable: true
})
*使用示例如下
/*
* @Description: 加密
* @Author: 吴文周
* @Github: http://gitlab.yzf.net/wuwenzhou
* @Date: 2020-03-13 17:39:01
* @LastEditors: 吴文周
* @LastEditTime: 2020-09-24 17:57:07
*/
(function () {
/**
* 需要拦截的url
*/
var urlArray = [''];
/**
* 解密数据
*/
function decryptResultAES(){
}
/**
* 转化数据返回
*/
function tryParseJson(v,xhr){
if (checkUrl(xhr.xhr._ProxyURL)) {
if (xhr.status === 200 && xhr.readyState === 4) {
if (xhr.xhr.responseText && JSON.parse(xhr.xhr.responseText).result) {
var responseText = JSON.parse(xhr.xhr.responseText);
var result = decryptResultAES(responseText.result);
if (typeof responseText.result !== 'object') {
responseText.result = JSON.parse(result);
return JSON.stringify(responseText);
}
}
}
}else{
return v;
}
}
/**
* 获取无后缀url
* @param {*} url
*/
function getUrl(url) {
return url.indexOf('?') > 0 ? url.substring(0, url.indexOf('?')) : url;
}
/**
* 判断数组是否包含字符串
* @param {*} url
*/
function checkUrl(url) {
return !!url? urlArray.indexOf(url) >= 0:false;
}
/**
* 劫持请求
*/
hookAjax({
responseText: {
getter: tryParseJson
},
response: {
getter:tryParseJson
},
//拦截回调
onreadystatechange: function (xhr) {
},
onload:function(xhr){
},
//拦截方法
open: function (arg, xhr) {
var url = getUrl(arg[1]);
// 通过篡改添加标识地址
Object.defineProperty(xhr, '_ProxyURL', {
value: url,
writable: true // 是否可以改变
})
},
send: function (arg, xhr) {
if (checkUrl(xhr._ProxyURL)) {
xhr.setRequestHeader("xxx", "xxx")
}
}
})
})()
复制代码
sub_filter "xxx"