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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM