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() { logout() {
return request({ return request({

View File

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

View File

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

View File

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