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

最新文章

  1. Word 2007 文档结构图混乱
  2. php防攻击方法
  3. JavaScript高级程序设计之数值数组排序
  4. 制作复选框(Toggle)
  5. OnCreate
  6. linux 基础(1)
  7. 冲刺NO.5
  8. 【刷题】【LeetCode】000-十大经典排序算法
  9. shell中脚本与函数的使用策略
  10. python中filter,reduce,map的用法
  11. 搭建简单的FTP服务器
  12. MSRA-TD5000数据集使用详解
  13. OpenGL——圆公式相关变化的绘制
  14. 小a和uim之大逃离
  15. quartz demo01
  16. 求值器本质--eval&apply
  17. 有关xml中的xmlns
  18. 【CodeForces】741 D. Arpa’s letter-marked tree and Mehrdad’s Dokhtar-kosh paths(dsu on tree)
  19. servlet 学习笔记(二)
  20. C# 窗体显示避免抢夺焦点

热门文章

  1. nginx简介&nginx基本配置和优化
  2. 两个对象值相同(x.equals(y) == true),但却可以有不同的hashcode?
  3. 使用 Spring 有哪些方式?
  4. django-debug-toolbar 开发利器的使用教程
  5. (5) 图和表(Figure and Table) 【论文写作】
  6. SCSS学习笔记(一)
  7. css创建叉和勾
  8. 【uniapp 开发】uni-app 技术点的链接记录
  9. SourceMonitor的安装
  10. Java 将Map按Value值降序排列