最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

vue axios 封裝請(qǐng)求攔截多次彈窗的問(wèn)題及解決

 更新時(shí)間:2024年08月30日 14:55:53   作者:Zero0985  
這篇文章主要介紹了vue axios 封裝請(qǐng)求攔截多次彈窗的問(wèn)題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

問(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)文章

最新評(píng)論

佛冈县| 马鞍山市| 福安市| 句容市| 南溪县| 富宁县| 寿宁县| 藁城市| 眉山市| 阳东县| 辰溪县| 章丘市| 天长市| 景东| 宁夏| 宁海县| 东平县| 嘉义县| 辰溪县| 霍林郭勒市| 彭阳县| 祁连县| 南阳市| 泌阳县| 务川| 沐川县| 太湖县| 夏邑县| 改则县| 南溪县| 海伦市| 金平| 库车县| 长白| 新河县| 介休市| 金坛市| 庐江县| 越西县| 晴隆县| 黄冈市|