//request攔截 service.interceptors.request.use( request => { let { current } = router.history; if ( store.getters["userStore/getToken"] && current.name !== "Login" && request.url != "/login/token/refresh" ) { //非登陸界面並且不是調用刷新接口並且本地要有token才可以加autho驗證 request.headers.Authorization = `Bearer ${ store.getters["userStore/getToken"] }`; } return request; }, error => { console.error(error); return error; } ); //response攔截 service.interceptors.response.use( response => { return response; }, async error => { try { if (error && error.response) { // debugger; switch (error.response.status) { case 401: // 返回 401 清除token信息並跳轉到登錄頁面也可以用這個邏輯 let refreshToken = store.getters["userStore/getParamRefreshToken"]; let { data } = await post("login/token/refresh", { refreshToken }); if (data.code === 200) { //刷新token成功后,獲取新的token,覆蓋舊的token,然后返回到報錯的頁面刷新掉 store.commit("userStore/setParamToken", data.result.access_token); //就是重新調用接口獲取數據 var backoff = new Promise(resolve => { resolve(); }); return backoff.then(r => { return service(error.config); }); // window.location.reload(); } else { //refreshtoken失效的話,就直接到登陸頁面 router.push("/login"); } return error; default: console.error(error); return error; } } else { console.error(error); return error; } } catch (error) { console.error(error); } } );