// request.ts import axios, { AxiosRequestConfig, AxiosError, AxiosResponse } from 'axios'; const baseUrl = import.meta.env.VITE_APP_API; // 添加一个新的类型,用于包装 AxiosRequestConfig interface InternalAxiosRequestConfig<T = any> extends AxiosRequestConfig { headers?: Record<string, any> | undefined; // 可以在这里添加额外的属性 // 比如 token?: string; } const token = sessionStorage.getItem('u_token'); const defaultHeaders: Record<string, any> = { Accept: 'application/json', ...(token && { Token: token }), // 其他默认头部... }; // 创建一个 axios 实例 const instance = axios.create({ baseURL: baseUrl, timeout: 10000, }); // 请求拦截器 const requestConfig: InternalAxiosRequestConfig = { // 其他配置... headers: { ...defaultHeaders }, }; // 响应拦截器 instance.interceptors.response.use( (response: AxiosResponse) => { if (response.status === 200) { return response.data; } else { // 处理非 200 状态码 return Promise.reject(new Error(`HTTP error: ${response.status}`)); } }, (error: AxiosError) => { // 对响应错误做处理 if (error.response) { // 请求已经发出,但服务器响应的状态码不在 2xx 范围内 console.error(`HTTP error: ${error.response.status}`); // 这里你可以根据状态码执行一些特定的逻辑 if (error.response.status === 401) { console.error("Unauthorized. Redirecting to login..."); // 例如,重定向到登录页面 // window.location.href = "/login"; } } else { // 请求没有发出,可能是网络问题或者其他原因 console.error("Network error:", error.message); } return Promise.reject(error); } ); // 封装请求函数 const request = async <T>(config: InternalAxiosRequestConfig): Promise<InternalAxiosRequestConfig> => { try { const response = await instance.request(config); return response; } catch (error) { // 在这里处理错误 console.error('Request error:', error); return Promise.reject(error); } }; export default request;