封装axios在项目中使用
2024-09-07 21:10:43
import store from '@/store/index'
import { Loading,Message,MessageBox } from 'element-ui'
import router from '@/router/index'
import {auth} from '@/utlis/auth'
// 创建axios实例
const service = axios.create({
baseURL: '/api', // api的base_url
timeout: 5000 // 请求超时时间
})
let loading = null;
//调用api时开启加载动画
function startLoading() {
loading = Loading.service({
lock: true,
text: '拼命加载中....',
background: 'rgba(0,0,0,0.7)'
})
}
//关闭加载动画
function endLoading() {
loading.close();
}
// 设置 post、get默认 Content-Type
// service.defaults.headers.post['Content-Type'] = 'application/json'
// service.defaults.headers.get['Content-Type'] = 'application/json'
// request拦截器
service.interceptors.request.use(config => {
//加载动画
startLoading();
// 如果当前已有token,则在请求头中加上
if (auth.getAuthorization()) {
//设置统一的请求头
config.headers['Authorization'] = auth.getAuthorization()// 让每个请求携带token--['X-Token']为自定义key 请根据实际情况自行修改
}
return config
}, error => {
// Do something with request error
Message({
message: error,
type: 'error'
})
Promise.reject(error)
})
// respone拦截器
service.interceptors.response.use(
/**
* 下面的注释为通过response自定义code来标示请求状态,当code返回如下情况为权限有问题,登出并返回到登录页
* 如通过xmlhttprequest 状态码标识 逻辑可写在下面error中
*/
response => {
const res = response.data;
if (response.status != 200) {
Message({
message: res.msg,
type: 'error'
});
return Promise.reject('error');
}
//结束加载动画
endLoading();
//弹出消息框,并跳转到主页
Message({
message: res.msg,
type: 'success'
});
return response;
},
error => {
endLoading();
const { status } = error.response;
//根据status码来判断token是否过期,若过期则退出登录并返回登录页
if(status === 500) {
Message({
message: '服务器未启动',
type: 'error'
})
}
else if(status == 401) {
MessageBox.confirm('token已经失效请重新登录', '确定登出', {
confirmButtonText: '重新登录',
cancButtonText: '取消',
type: 'warning'
}).then(() => {
//删除存储对象中的Token和Vuex中的用户信息
store.dispatch('setAuthorization',false).then(()=>{
auth.removeAuthorization();
store.commit('setUser',{});
location.reload();
});
router.push('/login');
})
} else {
Message({
message: error.response.data.msg,
type: 'error'
})
}
})
export const request = service
最新文章
- Word 2007 文档结构图混乱
- php防攻击方法
- JavaScript高级程序设计之数值数组排序
- 制作复选框(Toggle)
- OnCreate
- linux 基础(1)
- 冲刺NO.5
- 【刷题】【LeetCode】000-十大经典排序算法
- shell中脚本与函数的使用策略
- python中filter,reduce,map的用法
- 搭建简单的FTP服务器
- MSRA-TD5000数据集使用详解
- OpenGL——圆公式相关变化的绘制
- 小a和uim之大逃离
- quartz demo01
- 求值器本质--eval&;apply
- 有关xml中的xmlns
- 【CodeForces】741 D. Arpa’s letter-marked tree and Mehrdad’s Dokhtar-kosh paths(dsu on tree)
- servlet 学习笔记(二)
- C# 窗体显示避免抢夺焦点
热门文章
- nginx简介&;nginx基本配置和优化
- 两个对象值相同(x.equals(y) == true),但却可以有不同的hashcode?
- 使用 Spring 有哪些方式?
- django-debug-toolbar 开发利器的使用教程
- (5) 图和表(Figure and Table) 【论文写作】
- SCSS学习笔记(一)
- css创建叉和勾
- 【uniapp 开发】uni-app 技术点的链接记录
- SourceMonitor的安装
- Java 将Map按Value值降序排列