From d990e68c746a146e773f44404b700083aba9f14c Mon Sep 17 00:00:00 2001 From: "qumeng039@126.com" <86925389+qumen@users.noreply.github.com> Date: Fri, 15 Aug 2025 17:11:54 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96httpjs?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/utils/http.js | 54 +++++++++++++++++++++++------------------------ 1 file changed, 27 insertions(+), 27 deletions(-) diff --git a/src/utils/http.js b/src/utils/http.js index c1a62a3..09d2060 100644 --- a/src/utils/http.js +++ b/src/utils/http.js @@ -29,36 +29,36 @@ service.interceptors.response.use( async (response) => { const res = response.data const loginStore = useLoginStore() - if (res.code !== 200) { - ElMessage({ - message: res.message || "Error", - type: "error", - duration: 5 * 1000 - }) - if (res.code === 401 || res.code === 403) { - try { - // 若token过期,或者token无效,或者未找到token,对页面中需要认证的接口都有效,使得重新登录 - const refreshed = await loginStore.loginForRefreshToken() - if (refreshed) { - // 刷新成功,更新请求头中的accessToken - response.config.headers.Authorization = `Bearer ${loginStore.token}` - return service(response.config) // 重新发送失败的请求 - } - } catch (refreshError) { - ElMessage({ - message: "会话已过期,请重新登录!", - type: "error", - duration: 5 * 1000 - }) - cache.removeItem("token") - router.push("/login") - return Promise.reject(new Error("Refresh token failed")) + if (res.code == 200) { + return res + } + + //500会抛出该错 + if (res.code !== 401 && res.code !== 403) { + ElMessage.error(res.message || "Error") + } + + //res.code != 200 && res.code == 401 || res.code == 403的情况如下 + try { + // 尝试刷新token + const refreshed = await loginStore.loginForRefreshToken() + if (!refreshed) { + throw new Error("Refresh token failed") + } + // 刷新成功,更新请求头中的accessToken并重新发送请求 + const updateConfig = { + ...response.config, + headers: { + ...response.config.headers, + Authorization: `Bearer ${loginStore.token}` } } - return Promise.reject(new Error(res.message || "Error")) - } else { - return res + return service(updateConfig) //使用新请求头重新发送原始请求 + } catch (refreshError) { + cache.removeItem("token") + router.push("/login") + return Promise.reject(refreshError) } }, async (error) => {