http请求拦截

本文介绍了一个使用Axios库实现的请求与响应拦截器的示例代码,该拦截器用于处理HTTP请求的组装、加密及响应的解密、错误处理等。代码中包含了对请求头的设置、参数的加密传输、以及对特定状态码的响应处理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

import axios from ‘axios’
import store from ‘@/vuex’
import {generateUUID} from ‘@/utils/uuIdUtils’
import {Encrypt,Decrypt} from ‘@/utils/cryptoUtils’
import { Message } from ‘element-ui’

export default api
export const esopUrl = “http://xxxx”

var thisTime=new Date();
axios.interceptors.request.use(config => { //请求拦截,所有请求都先经过组装处理
let requestMsg={
header:{
timestamp:formatDate(thisTime,“yyyyMMddhhmmss”),
messageId:generateUUID(),
access_token:’’
},
content:{ }
};
config.timeout=10000
config.baseURL=remoteUrl//后台环境地址
var xtoken=store.getters.access_token
if(typeof(xtoken)!‘undefined’&&xtoken!’’){
config.headers[‘access_token’] = xtoken
requestMsg.header.access_token=xtoken
}
if(typeof(config.data)=‘undefined’||config.datanull){
config.data = {}
}
//console.log(“请求报文:”,config.url,"/",config.data)
if(config.method==‘post’&&config.url.indexOf(‘upload’)<0){//fileops
requestMsg.content= Encrypt(JSON.stringify(config.data));//对post请求进行加密
config.data=requestMsg;
}else if(config.method==‘get’){
requestMsg.content={
…config.params
};
config.params =requestMsg
}
if(config.method==‘post’&&(config.url.indexOf(‘download’)>=0||config.url.indexOf(‘getexcel’)>=0)){
config.responseType=‘blob’
config.timeout=60000
}
if(config.url.indexOf(‘upload’)>0){
config.timeout=60000
}
return config
},function(error){
Message.error(‘抱歉,系统出了点问题’)
return Promise.reject(error)
}
)
axios.interceptors.response.use(response=> {//响应拦截,所有相应都先经过拆分处理
let responseMsg = {
header: {
resDesc: ‘’,
resCode: ‘’
},
content: {}
}
let responseUrl=response.config.url
responseMsg = response.data;
if(responseUrl.indexOf(‘download’)>=0||responseUrl.indexOf(‘getexcel’)>=0){
return response;
}
if (responseMsg.header.resCode == 200) {
response.data = JSON.parse(Decrypt(responseMsg.content))
} else if (responseMsg.header.resCode == 401||responseMsg.header.resCode == 40101) {
Message.error(‘登录超时或无权限,请重新登录’)
setTimeout(() => {
sessionStorage.clear()
window.location.href = esopUrl
}, 3000);
} else{
Message.error(responseMsg.header.resDesc)
}
//console.log(“返回报文:”,responseUrl,"/", response.data)
return response;
}, function (error) {
// 对响应错误做点什么
console.log(“错”,error.response)
if(error.response){
let errorCode=error.response.status
switch(errorCode) {
case 401:
Message.error(‘登录超时或无权限,请重新登录’)
setTimeout(() => {
sessionStorage.clear()
window.location.href = esopUrl
}, 3000);
break;
default:
Message.error(‘抱歉,系统出了点问题’)
}
}
//router.replace({path: ‘/500’})
return Promise.reject(error);
});

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值