配置请求拦截器和相应拦截器

import axios from ‘axios’
import router from ‘…/router’
import { Message } from ‘element-ui’
const service = axios.create ({
//设置过期时间
// timeout: 6000,
baseURL:process.env.VUE_APP_ENV
});
//根据命令来选择开发环境
if (process.env.NODE_ENV === ‘production’) {
if (process.env.VUE_APP_ENV === ‘pro’) {
//production 生产环境
service.defaults.baseURL = ‘’
} else {
//test 测试环境
service.defaults.baseURL =’’
}
} else {
// service.defaults.baseURL = ‘’
}

service.defaults.headers.post[‘Content-Type’] = ‘application/x-www-form-urlencoded’;
//请求拦截,用于处理在请求前的操作
// let loading = null;
service.interceptors.request.use(config => {
//请求需要展示加载框
//loading = loading.service({
//text:‘正在加载中…’
//})
const token = sessionStorage.getItem(‘token’);
if(token) {
config.headers[‘Authorization’] = token
}
return config
}, (error) => {
return Promise.reject(error)
})
/* 请求响应拦截
用于处理需要在请求返回后的操作 */

let count = 0
service.interceptors.response.use(response => {
// 请求关闭后加载框
// if(loading) {
// loading.close()
// }

const responseCode = response.status
// 如果返回的状态码为200,说明接口成功,可以正常拿到数据
//否则的话就抛出错误
if (responseCode === 200) {
    return Promise.resolve (response.data)
} else {
    return Promise.reject(response)
}

}, error => {
//请求响应后关闭加载框
// if (loading) {
// loading.close()
// }
//断网或者请求超时状态
if(!error.response) {
//请求超时状态
if (error.message.include(‘timeout’)) {
console.log(‘超时了’)
Message.error(‘请求超时,请检查网络是否连接正常’)
} else {
//可以展示断网插件
console.log(‘断网了’)
Message.error(‘请求失败,请检查网络是否已连接’)
}
return
}
//服务器返回不是 2开头的情况,会进入这个回调
//可以根据后端返回的状态码进行不同的操作
const responseCode = error.response.status

switch (responseCode) {
    
    //401:未登录
    case 401:
    if (count === 0) { 
        Message({
            message:'该账号登录超时或者已经在别处登录',
            type:'error'
        })
    }
    count++
        //跳转登录页面
        router.replace({
            path:'/',
            // query: {
            //     redirect:router.currentRoute.fullPath
            // }
            
        })
        break
    // 其他错误,直接抛出错误提示
    default:
        Message({
            message:'服务器正忙,请稍后再试',
            type:'error'
        })
}
return Promise.reject(error)

})

export default service;


版权声明:本文为callMeOldWang原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。