refactor: ♻️ request 工具类优化

This commit is contained in:
ray
2024-11-13 12:54:07 +08:00
parent d91928e9ed
commit f1598aedfd
4 changed files with 30 additions and 17 deletions

View File

@@ -20,6 +20,18 @@ const AuthAPI = {
});
},
/** 刷新token 接口*/
refreshToken(refreshToken: string) {
return request<any, LoginResult>({
url: `${AUTH_BASE_URL}/refresh-token`,
method: "post",
data: { refreshToken: refreshToken },
headers: {
Authorization: "no-auth",
},
});
},
/** 注销 接口*/
logout() {
return request({

View File

@@ -113,7 +113,7 @@ const UserAPI = {
url: `${USER_BASE_URL}/export`,
method: "get",
params: queryParams,
responseType: "arraybuffer",
responseType: "blob",
});
},

View File

@@ -59,7 +59,7 @@ export const useUserStore = defineStore("user", () => {
return new Promise<void>((resolve, reject) => {
AuthAPI.logout()
.then(() => {
clearUserSession();
clearUserData();
resolve();
})
.catch((error) => {
@@ -73,7 +73,7 @@ export const useUserStore = defineStore("user", () => {
*
* @returns
*/
function clearUserSession() {
function clearUserData() {
return new Promise<void>((resolve) => {
clearToken();
usePermissionStoreHook().resetRouter();
@@ -87,7 +87,7 @@ export const useUserStore = defineStore("user", () => {
getUserInfo,
login,
logout,
clearUserSession,
clearUserData,
};
});

View File

@@ -1,7 +1,4 @@
import axios, {
type InternalAxiosRequestConfig,
type AxiosResponse,
} from "axios";
import axios, { type InternalAxiosRequestConfig, type AxiosResponse } from "axios";
import qs from "qs";
import { useUserStoreHook } from "@/store/modules/user";
import { ResultEnum } from "@/enums/ResultEnum";
@@ -20,9 +17,14 @@ const service = axios.create({
// 请求拦截器
service.interceptors.request.use(
(config: InternalAxiosRequestConfig) => {
const accessToken = getToken();
if (accessToken) {
config.headers.Authorization = accessToken;
// 如果设置了 "no-auth",则不携带 Authorization 头,用于登录、刷新 token 等接口
if (config.headers.Authorization === "no-auth") {
delete config.headers.Authorization;
} else {
const accessToken = getToken();
if (accessToken) {
config.headers.Authorization = accessToken;
}
}
return config;
},
@@ -34,11 +36,10 @@ service.interceptors.request.use(
// 响应拦截器
service.interceptors.response.use(
(response: AxiosResponse) => {
// 检查配置的响应类型是否为二进制类型('blob' 或 'arraybuffer', 如果是,直接返回响应对象
if (
response.config.responseType === "blob" ||
response.config.responseType === "arraybuffer"
) {
const { responseType } = response.config;
// 如果响应类型是二进制数据(文件导出场景), 则直接返回 response
if (responseType === "blob") {
return response;
}
@@ -61,7 +62,7 @@ service.interceptors.response.use(
type: "info",
});
useUserStoreHook()
.clearUserSession()
.clearUserData()
.then(() => {
location.reload();
});