import axios, { AxiosError, type AxiosInstance, type AxiosRequestConfig, AxiosResponse, InternalAxiosRequestConfig } from "axios"; import { UrlCheckUtils } from '../utils/index' class AxiosInfra { public instance: AxiosInstance; public constructor() { this.instance = axios.create({ baseURL: UrlCheckUtils.check(), timeout: Number(window.__APP_CONFIG__.VITE_HTTPTIMEOUT), headers: { "Content-Type": "application/json" } }); this.ResponseInterceptor(); this.RequestInterceptor(); } public async get(params: AxiosRequestConfig): Promise { return await this.instance.get(params.url, { params: params.data, headers: Object.assign({ Authorization: localStorage.getItem("token") }, params.headers) }); } public async post(params: AxiosRequestConfig): Promise { return await this.instance.post(params.url, params.data, { headers: Object.assign({ Authorization: localStorage.getItem("token") }, params.headers) }) } /** * Put 请求 * 请求参数请参考接口:RequestParams * @param params */ public async put(params: AxiosRequestConfig): Promise { return await this.instance.put(params.url, params.data) } /** * delete 请求 * 请求参数请参考接口:RequestParams * @param params */ public async delete(params: AxiosRequestConfig): Promise { return await this.instance.delete(params.url, { params: params.data }) } /** * 响应拦截器 * @constructor */ public async ResponseInterceptor(): Promise { this.instance.interceptors.response.use( (response: AxiosResponse) => { return response.data.result; }, (error: AxiosError) => { console.log(` ❌ 请求错误 ❌ 1、基地址: ${ error.config?.baseURL } 2、短地址: ${ error.config?.url } 3、请求 方式: ${ error.config?.method } 4、请求 参数: ${ JSON.stringify(error.config?.params) } 5、请求 头 : ${ JSON.stringify(error.config?.headers) } ------------------------------------------------------------ 6、错误信息为: ${ error.message } 7、错误代码为: ${ error.stack } `); return Promise.reject(error) }) } /** * 添加请求拦截器 * @constructor */ public async RequestInterceptor(): Promise { this.instance.interceptors.request.use((config: InternalAxiosRequestConfig) => { return config }, function (error: AxiosError) { return Promise.reject(error) }) } } export default new AxiosInfra();