From ef9aa625724b754afc565b8b1f2589376f4d5c50 Mon Sep 17 00:00:00 2001 From: kailong321200875 <321200875@qq.com> Date: Tue, 9 Jan 2024 14:46:07 +0800 Subject: [PATCH] =?UTF-8?q?perf:=20request=E8=AF=B7=E6=B1=82=E6=A0=B9?= =?UTF-8?q?=E6=8D=AEContentType=E8=87=AA=E5=8A=A8=E8=BD=AC=E6=8D=A2?= =?UTF-8?q?=E6=95=B0=E6=8D=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/axios/index.ts | 10 ++++++++-- src/constants/index.ts | 11 ++++++++++- src/utils/index.ts | 11 +++++++++++ 3 files changed, 29 insertions(+), 3 deletions(-) diff --git a/src/axios/index.ts b/src/axios/index.ts index 94cbfc3..acdfc4c 100644 --- a/src/axios/index.ts +++ b/src/axios/index.ts @@ -1,15 +1,21 @@ import service from './service' -import { CONTENT_TYPE } from '@/constants' +import { CONTENT_TYPE, TRANSFORM_REQUEST_DATA } from '@/constants' import { useUserStoreWithOut } from '@/store/modules/user' +import { objToFormData } from '@/utils' const request = (option: AxiosConfig) => { const { url, method, params, data, headers, responseType } = option + // 是否需要转换数据格式 + const transformData = + TRANSFORM_REQUEST_DATA && + (headers?.['Content-Type'] || CONTENT_TYPE) === 'multipart/form-data' && + data const userStore = useUserStoreWithOut() return service.request({ url: url, method, params, - data, + data: transformData ? objToFormData(data) : data, responseType: responseType, headers: { 'Content-Type': CONTENT_TYPE, diff --git a/src/constants/index.ts b/src/constants/index.ts index 4dc2db2..83ee4c6 100644 --- a/src/constants/index.ts +++ b/src/constants/index.ts @@ -6,7 +6,11 @@ export const SUCCESS_CODE = 0 /** * 请求contentType */ -export const CONTENT_TYPE = 'application/json' +export const CONTENT_TYPE: + | 'application/json' + | 'multipart/form-data' + | 'application/x-www-form-urlencoded' + | 'text/plain' = 'multipart/form-data' /** * 请求超时时间 @@ -27,3 +31,8 @@ export const NO_RESET_WHITE_LIST = ['Redirect', 'Login', 'NoFind', 'Root'] * 表格默认过滤列设置字段 */ export const DEFAULT_FILTER_COLUMN = ['expand', 'selection'] + +/** + * 是否根据headers->content-type自动转换数据格式 + */ +export const TRANSFORM_REQUEST_DATA = true diff --git a/src/utils/index.ts b/src/utils/index.ts index 8ac4d95..de17305 100644 --- a/src/utils/index.ts +++ b/src/utils/index.ts @@ -124,3 +124,14 @@ export function toAnyString() { export function firstUpperCase(str: string) { return str.toLowerCase().replace(/( |^)[a-z]/g, (L) => L.toUpperCase()) } + +/** + * 把对象转为formData + */ +export function objToFormData(obj: Recordable) { + const formData = new FormData() + Object.keys(obj).forEach((key) => { + formData.append(key, obj[key]) + }) + return formData +}