perf: request请求根据ContentType自动转换数据

This commit is contained in:
kailong321200875 2024-01-09 14:46:07 +08:00
parent da00f8b756
commit ef9aa62572
3 changed files with 29 additions and 3 deletions

View File

@ -1,15 +1,21 @@
import service from './service' import service from './service'
import { CONTENT_TYPE } from '@/constants' import { CONTENT_TYPE, TRANSFORM_REQUEST_DATA } from '@/constants'
import { useUserStoreWithOut } from '@/store/modules/user' import { useUserStoreWithOut } from '@/store/modules/user'
import { objToFormData } from '@/utils'
const request = (option: AxiosConfig) => { const request = (option: AxiosConfig) => {
const { url, method, params, data, headers, responseType } = option 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() const userStore = useUserStoreWithOut()
return service.request({ return service.request({
url: url, url: url,
method, method,
params, params,
data, data: transformData ? objToFormData(data) : data,
responseType: responseType, responseType: responseType,
headers: { headers: {
'Content-Type': CONTENT_TYPE, 'Content-Type': CONTENT_TYPE,

View File

@ -6,7 +6,11 @@ export const SUCCESS_CODE = 0
/** /**
* contentType * 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'] export const DEFAULT_FILTER_COLUMN = ['expand', 'selection']
/**
* headers->content-type自动转换数据格式
*/
export const TRANSFORM_REQUEST_DATA = true

View File

@ -124,3 +124,14 @@ export function toAnyString() {
export function firstUpperCase(str: string) { export function firstUpperCase(str: string) {
return str.toLowerCase().replace(/( |^)[a-z]/g, (L) => L.toUpperCase()) 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
}