vue请求拦截-统一配置请求头

/* 直接引入这个文件作为xios

import axios from './http' main.js里也要引入

*/

// import Vue from 'vue'

import { Toast } from 'vant';

import axios from "axios"

import { restUrl as baseUrl } from '@/config'

import { list } from '@/common/js/url-white-list'

import { codeHeaders, encryptBody } from '@/common/js/sm.js'

import router from '@/router'

import store from '../store'

axios.defaults.withCredentials = true

axios.defaults.baseURL = baseUrl

axios.interceptors.request.use(

config => {

let newConfig = config;

let token = window.localStorage.getItem('access_token')

if (process.env.VUE_APP_ENCRYPTION === '1') {

newConfig = codeHeaders(config)

newConfig = encryptBody(newConfig)

} else {

newConfig = config;

}

// 不需要token的请求

for (const i of list) {

if (newConfig.url.indexOf(i) != -1) {

return newConfig;

}

}

//设置请求头

newConfig.headers['Authorization'] = 'Bearer ' + token

//是否正在刷新token true延迟请求,不是就返回正常的请求头

const isRefresh = store.state.isRefresh

if (isRefresh) {

return new Promise((resolve) => {

setTimeout(() => {

let token = window.localStorage.getItem('access_token')

newConfig.headers['Authorization'] = 'Bearer ' + token

resolve(newConfig);

}, 1000);

})

} else {

return newConfig;

}

},

error => {

// store.dispatch('hideLoading'); //本来是说要加统一的请求loading的 后面各方面考虑没有加

return Promise.reject(error);

})

axios.interceptors.response.use(

response => {

// store.dispatch('hideLoading');

return response

},

error => {

// store.dispatch('hideLoading');

// // 非法的身份或者身份过期,需要重新登录 // 先退出,在登录 && error.response.config.url.indexOf('/ycloud-user/users/logOut') === -1)

if (error.response.status !== 400) {

if (error.response.status === 401) {

router.push('/login');

} else if (error.response.status === 403) { // 未授权访问,给用户提示或路由到一个其他错误页面

router.push('/login');

} else if (error.response.status === 500 && error.response.data.error == 'Internal Server Error') { // 未授权访问,给用户提示或路由到一个其他错误页面

if (error.response.data.message === '原始口令校验失败。') {

Toast({ message: '原始密码输入错误', duration: 2000 });

} else if (error.response.data.message === '原始口令与新口令不能一样。') {

Toast({ message: '旧密码和新密码不能重复', duration: 2000 });

} else {

return Promise.reject(error);

}

} else if (error.response.status === 500 || error.response.status === 503) {

router.push('/error');

} else if (error.response.status === 504) {

router.push('/error');

Toast({ message: '请求超时,请刷新页面', duration: 2000 });

} else {

// Toast({message:'请求异常',duration:5000});

router.push('/error');

return Promise.reject(error);

}

} else {

return Promise.reject(error);

}

})

export default axios