Appearance
接口请求
接口请求
1. 参数签名
- 对请求参数进行签名加密,签名算法如下
ts
/**
* 数据签名
* @param {*} obj
*/
export function getSignature(obj:any) {
let encrypt = {};
if (obj) {
encrypt = obj
}
// 签名
const signature = getEncrypt(encrypt, '21232f297a57a5a743894a0e4a801fc')
encrypt.signature = signature
return encrypt
}
2. 请求拦截器
- 在发送请求之前,注入
x-access-appid
,x-access-token'
,signature
参数
ts
// 添加请求拦截器
service.interceptors.request.use(
(config) => {
// 在发送请求之前
config.headers['x-access-appid'] = 'admin'
if (Session.get('token')) {
config.headers!['x-access-token'] = `${Session.get('token')}`;
}
// signature
if (config.method === 'post') {
config.data = getSignature(config.data)
} else if (config.method === 'get') {
config.params = getSignature(config.params)
}
return config;
},
(error) => {
// 对请求错误做些什么
return Promise.reject(error);
}
);
3. 响应拦截器
- 对响应结果进行处理,token过期,请求异常等
ts
// 添加响应拦截器
service.interceptors.response.use(
(response) => {
// 对响应数据做点什么
const res = response.data;
// 业务逻辑错误
if (res.status !== 1) {
// token 过期了
if (res.code === 11102 || res.code === 11103) {
// to re-login
Session.clear(); // 清除浏览器全部临时缓存
window.location.href = '/'; // 去登录页
ElMessageBox.alert('你已被登出,请重新登录', '提示', {})
.then(() => {})
.catch(() => {});
} else if(res.msg){
ElMessage.error(res.msg)
}
return Promise.reject(service.interceptors.response);
} else {
return response.data;
}
},
(error) => {
// 对响应错误做点什么
if (error.message.indexOf('timeout') != -1) {
ElMessage.error('网络超时');
} else if (error.message == 'Network Error') {
ElMessage.error('网络连接错误');
} else {
if (error) {
console.log(error.response)
//ElMessage.error(error.response.msg);
}else{
ElMessage.error('接口路径找不到');
}
}
return Promise.reject(error);
}
);