import { serialize } from '../../utils/serialize' import { IPlugin } from '../../intf/IPlugin' import { AxiosInstance } from 'axios' /** 请求参数序列化, 根据 contentType 进行转换 */ export const serializeData = (): IPlugin => { return { pluginName: 'serialize-data', handler: (axios: AxiosInstance) => { /** 覆盖 transform request 实现 */ axios.defaults.transformRequest = [ (data: any, headers: any) => { const contentType: string = headers['content-type'] ?? headers['Content-Type'] ?? headers['CONTENT-TYPE'] // ? 如果是表单请求, 执行参数序列化 if (contentType && contentType.indexOf('application/x-www-form-urlencoded') !== -1) { /** 参数序列化 */ data = serialize(data) } else if (typeof data === 'object') { try { data = JSON.stringify(data) } catch (error) {} } return data } ] /** 覆盖 params 序列化实现 */ axios.defaults.paramsSerializer = (params: any) => serialize(params) } } }