import { AxiosInstance } from 'axios' import { combineURLs, isAbsoluteURL } from '../../utils/build-full-path' import { IPlugin } from '../../intf/IPlugin' import { IRequestOptions } from '../../intf/IRequestOptions' /** url 序列化, 支持: 格式校验、修复 * @description 支持重复 '//' 修复. */ export const serializeUrl = (): IPlugin => { return { pluginName: 'serialize-url', handler: (axios: AxiosInstance) => { axios.interceptors.request.use((req: IRequestOptions) => { const { url, baseURL } = req let target: string | undefined // 填充 baseUrl if (baseURL && url && !isAbsoluteURL(url)) { target = combineURLs(baseURL, url) } else { target = url } // 去除重复 '/', 如: http://www.jiaoyihu.com//apis/user/get if (req['urlFormat'] !== false) { target = target?.replace(/[://|/]{2,}/g, (sub) => { return sub === '://' ? sub : '/' }) } return req }) } } }