vue axios 封裝請(qǐng)求攔截多次彈窗的問(wèn)題及解決
問(wèn)題
token過(guò)期或者失效后,彈窗提示用戶(hù)登陸失效,重新登陸。
在一些頁(yè)面中初始化時(shí)調(diào)了多個(gè)API,會(huì)出現(xiàn)多次彈出重新登陸的彈框
解決方案
1、使用axios中的CancelToken,在判斷登陸失敗時(shí),取消后面的API請(qǐng)求。
2、跳轉(zhuǎn)路由,取消上一個(gè)頁(yè)面未請(qǐng)求成功的API。
實(shí)現(xiàn)方法
const myAxios = {
install(Vue) {
let http = axios.create({
// baseURL: 'http://localhost:8088/hklms/app',
// baseURL: process.env.BASE_API,
timeout:1000,
// transformRequest: [
// function (data){
// return qs.stringify(data, {
// indices: false
// })
// }
// ]
})
http.interceptors.request.use(
config => {
config.cancelToken = new axios.CancelToken((cancel) => {
//使用vuex 定義pushCancel,請(qǐng)求進(jìn)來(lái)存入
store.dispatch('user/pushCancel', {cancelToken:cancel})
});
if (store.state.user.token) {
config.headers['token'] = store.state.user.token
}
return config
},
error => {
console.log(error)
}
)
http.interceptors.response.use(
response => {
const res = response.data;
if(res.code && res.code === 401){
store.dispatch('user/clearCancel');
sessionStorage.clear()
Message.error(res.msg)
router.push("/login")
return Promise.reject(error);
}else {
return response
}
},
error => {
return Promise.reject(error);
}
)
store中 user.js
state: {
axiosCancelArr:[],
}
mutations:{
CLOSE_SIDEBAR: (state) => {
state.opened = !state.opened
if(state.opened){
sessionStorage.setItem('sidebarStatus',1)
}else {
sessionStorage.setItem('sidebarStatus',0)
}
},
PUSH_CANCEL(state, cancel){
state.axiosCancelArr.push(cancel.cancelToken);
},
CLEAR_CANCEL(state){
state.axiosCancelArr.forEach(e=>{
e && e()
});
state.axiosCancelArr = []
}
},
actions: {
pushCancel({commit}, cancel){
commit('PUSH_CANCEL', cancel)
},
clearCancel({commit}){
commit('CLEAR_CANCEL');
}
}
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
vue3+ts+vite使用el-table表格渲染記錄重復(fù)情況
這篇文章主要給大家介紹了關(guān)于vue3+ts+vite使用el-table表格渲染記錄重復(fù)情況的相關(guān)資料,我們可以通過(guò)合并渲染、數(shù)據(jù)緩存或虛擬化等技術(shù)來(lái)減少重復(fù)渲染的次數(shù),文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下2023-12-12
Vue中嵌入可浮動(dòng)的第三方網(wǎng)頁(yè)窗口的示例詳解
本文介紹了在Vue2項(xiàng)目中嵌入可浮動(dòng)的第三方網(wǎng)頁(yè)窗口的實(shí)現(xiàn)方法,包括使用iframe、div+script和dialog元素等方式,并提供了一個(gè)實(shí)戰(zhàn)Demo,展示了如何在Vue組件中動(dòng)態(tài)加載和控制浮窗的顯示,需要的朋友可以參考下2025-02-02
VUE2.0自定義指令與v-if沖突導(dǎo)致元素屬性修改錯(cuò)位問(wèn)題及解決方法
這篇文章主要介紹了VUE2.0自定義指令與v-if沖突導(dǎo)致元素屬性修改錯(cuò)位問(wèn)題及解決方法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-07-07
Vue裝飾器中的vue-property-decorator?和?vux-class使用詳解
這篇文章主要介紹了Vue裝飾器中的vue-property-decorator?和?vux-class使用詳解,通過(guò)示例代碼給大家介紹的非常詳細(xì),對(duì)vue-property-decorator?和?vux-class的使用感興趣的朋友一起看看吧2022-08-08
vue3中setup語(yǔ)法糖下通用的分頁(yè)插件實(shí)例詳解
這篇文章主要介紹了vue3中setup語(yǔ)法糖下通用的分頁(yè)插件,實(shí)例代碼介紹了自定義分頁(yè)插件:PagePlugin.vue,文中提到了vue3中setup語(yǔ)法糖下父子組件之間的通信,需要的朋友可以參考下2022-10-10
vue項(xiàng)目報(bào)錯(cuò)Extra?semicolon?(semi)問(wèn)題及解決
這篇文章主要介紹了vue項(xiàng)目報(bào)錯(cuò)Extra?semicolon?(semi)問(wèn)題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-10-10
vue把輸入框的內(nèi)容添加到頁(yè)面的實(shí)例講解
在本篇文章里小編給大家整理的是關(guān)于vue把輸入框的內(nèi)容添加到頁(yè)面的實(shí)例以及相關(guān)知識(shí)點(diǎn),需要的朋友們學(xué)習(xí)下。2019-11-11
Vue實(shí)現(xiàn)JSON字符串格式化編輯器組件功能
這篇文章主要介紹了Vue實(shí)現(xiàn)JSON字符串格式化編輯器組件,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧2024-01-01
Vue.js頁(yè)面驗(yàn)證跳轉(zhuǎn)功能實(shí)現(xiàn)
這篇文章主要介紹了Vue.js頁(yè)面驗(yàn)證跳轉(zhuǎn)功能實(shí)現(xiàn),本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),感興趣的朋友跟隨小編一起看看吧2024-04-04

