ng / frontend /src /utils /request.ts
epii-1
222222
f0953a4
import axios, { AxiosResponse, AxiosRequestConfig } from "axios";
import { ElMessage } from "element-plus";
import { isMobileDevice } from "@/utils/index";
import { showNotify } from "vant";
import { RequestResult } from "../types/response";
import { STORAGE_KEYS } from "@/constants/storage";
const errorMessage = (message: string) => {
if (isMobileDevice()) {
console.log(message);
showNotify({
type: "danger",
message,
});
return;
}
ElMessage.error(message);
};
const axiosInstance = axios.create({
baseURL: import.meta.env.VITE_API_BASE_URL as string,
timeout: 16000,
withCredentials: true,
headers: {
"Content-Type": "application/json",
},
});
function isLoginAndRedirect(url: string) {
return url.includes("/api/user/login") || url.includes("/api/user/register");
}
axiosInstance.interceptors.request.use(
(config) => {
const token = localStorage.getItem(STORAGE_KEYS.TOKEN);
if (token) {
config.headers.Authorization = `Bearer ${token}`;
} else if (!isLoginAndRedirect(config.url || "")) {
errorMessage("请先登录");
window.location.href = "/login";
}
return config;
},
(error) => {
return Promise.reject(error);
}
);
axiosInstance.interceptors.response.use(
(response: AxiosResponse) => {
const res = response.data;
return res;
},
(error) => {
if (error.response.status === 401) {
errorMessage("登录过期,请重新登录");
localStorage.removeItem(STORAGE_KEYS.TOKEN);
window.location.href = "/login";
return Promise.reject(new Error("登录过期,请重新登录"));
}
errorMessage(error.response.statusText);
return Promise.reject(new Error(error.response.statusText));
}
);
const request = {
get: <T>(url: string, config?: AxiosRequestConfig): Promise<RequestResult<T>> => {
return axiosInstance.get(url, { ...config });
},
// eslint-disable-next-line @typescript-eslint/no-explicit-any
post: <T, D = any>(
url: string,
data: D,
config?: AxiosRequestConfig
): Promise<RequestResult<T>> => {
return axiosInstance.post(url, data, { ...config });
},
put: axiosInstance.put,
delete: axiosInstance.delete,
};
export default request;