From 6ecafa8bc2093dab00d3d91aee2b338e1a63da3e Mon Sep 17 00:00:00 2001 From: osiris Date: Thu, 7 Mar 2024 15:26:36 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20mock=E4=B8=8B=E5=8D=88=E6=97=A0=E6=B3=95?= =?UTF-8?q?=E4=BD=BF=E7=94=A8=E7=99=BB=E5=BD=95=E5=8F=8A=E7=9B=B8=E5=85=B3?= =?UTF-8?q?=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/store/modules/user.ts | 2 +- src/utils/request.ts | 35 +++++++++++++++++++++++++++++++---- 2 files changed, 32 insertions(+), 5 deletions(-) diff --git a/src/store/modules/user.ts b/src/store/modules/user.ts index 7a96b9b..a6871d1 100644 --- a/src/store/modules/user.ts +++ b/src/store/modules/user.ts @@ -4,7 +4,7 @@ import type { LoginReqData, RegisterReqData, sendCodeEmailReq, ForgetReqData } f export const useUserStore = defineStore('user', { //用来存放变量 state: () => ({ - token: localStorage.getItem('TOKEN'),//token + token: import.meta.env.VITE_IS_MOCK == 'true' ? localStorage.setItem('TOKEN', '') : localStorage.getItem('TOKEN'),//token username: '', avatar: '', email: '', diff --git a/src/utils/request.ts b/src/utils/request.ts index ce67a4c..63aff6e 100644 --- a/src/utils/request.ts +++ b/src/utils/request.ts @@ -9,12 +9,35 @@ let request = axios.create({ baseURL: import.meta.env.VITE_IS_MOCK == 'true' ? import.meta.env.VITE_APP_BASE_API : import.meta.env.VITE_SERVE + import.meta.env.VITE_APP_BASE_API, timeout: 5000 }) +//创建一个存储CancelToken源的映射,用于管理请求和取消操作 +const cancelSources = new Map(); +//mock环境下无法使用的接口 +const mockBanUrl: string[] = [ + '/login', + '/user/info', + '/get/tool/collects', + '/send/forget/password/code', + '/send/register/code', + '/forget/password', + '/register', + '/logout' +]; //请求拦截器 request.interceptors.request.use(config => { - //获取token - if (userStore.token) { - // config.headers.token = userStore.token - config.headers.Authorization = 'Bearer ' + userStore.token + if (import.meta.env.VITE_IS_MOCK == 'true' && config.url != undefined && mockBanUrl.includes(config.url)) { + //mock环境不能使用登录后相关功能 + const source = axios.CancelToken.source() + //将source与请求的url或某种唯一标识符关联起来 + cancelSources.set(config.url, source); + config.cancelToken = source.token; + //取消 + source.cancel('Request canceled by the user.'); + } else { + //获取token + if (userStore.token) { + // config.headers.token = userStore.token + config.headers.Authorization = 'Bearer ' + userStore.token + } } return config; }); @@ -27,6 +50,10 @@ request.interceptors.response.use((response) => { } return response.data; }, (error) => { + if (error.code == 'ERR_CANCELED') { + //拒绝响应 + return Promise.race([]); + } //处理网络错误 let msg = ''; let status = error.response.status;