請求后台參數格式問題
當請求后台傳遞參數時,有多中類型,而每一種都需要前后台進行配合,而這有時候會很簡單,有時候卻十分困難,記錄一下,以備后期深究
數據
后台需要的數據
- form表單
- 嵌套數據,第二層后用字符串格式
{obj: '{a: 1}'}
前台設置
- form請求頭
'Content-Type': 'application/x-www-form-urlencoded;charset=UTF-8'
- 參數設置
qs.stringify(params)
上述借助了
qs
插件,看起來很美好,而且也很ok,可惜死活后台接收不到{obj: {a: 1}}
, obj的具體參數,各種折騰依舊不行,各種折騰qs
,可惜無解,仔細回味 后台一句話,obj的參數是JSON格式字符串,何不手動改造,而不使用qs
呢
代碼
請求參數結構
const params = {
pageSize: 5,
currentPage: 1,
sortParams: [
{
sort: 'time desc'
}
]
}
需要改造為
通過上圖可以看出,第二層之后的結構保留字符串格式
改造
// 數據結構判斷
function type (params) {
// Symbol類型
const typeofObje = typeof params
if (typeofObje !== 'object') return typeofObje
if (params === null) return 'null'
const obj = {};
`Boolean,Number,String,Function,Array,Date,RegExp,Object,Error,Set,Map`.split(',').forEach(e => {
obj[`[object ${e}]`] = e.toLowerCase()
})
const res = Object.prototype.toString.call(params)
return obj[res]
}
// 改造
const Data = JSON.parse(JSON.stringify(params))
for (let item in Data) {
if (type(Data[item]) === 'object' || type(Data[item]) === 'array') {
// 只要是object,array就進行轉為JSON字符串
Data[item] = JSON.stringify(Data[item])
}
}
// 引入qs
import qs from 'qs'
payLoad = qs.stringify(Data) // 便可以了
總結
- 在使用過程中,
qs
的stringify
有很多種配置,但是我沒有找到適合我的,只能手動改造了 - 感覺難點在於,
qs
被我認為無所不能,導致沒能意識到錯誤,其次后台其實並不是很清楚,前台到底是如何傳參的,他也無法明確指出前台到底該如何傳參,只能不斷嘗試了