form數據請求參數格式

請求後臺參數格式問題

當請求後臺傳遞參數時,有多中類型,而每一種都須要先後臺進行配合,而這有時候會很簡單,有時候卻十分困難,記錄一下,以備後期深究數據結構

數據

後臺須要的數據app

  • form表單
  • 嵌套數據,第二層後用字符串格式 {obj: '{a: 1}'}url

    前臺設置prototype

  • form請求頭 'Content-Type': 'application/x-www-form-urlencoded;charset=UTF-8'
  • 參數設置qs.stringify(params)插件

上述藉助了qs插件,看起來很美好,並且也很ok,惋惜死活後臺接收不到{obj: {a: 1}}, obj的具體參數,各類折騰依舊不行,各類折騰qs,惋惜無解,仔細回味 後臺一句話,obj的參數是JSON格式字符串,何不手動改造,而不使用 qscode

代碼

請求參數結構orm

const params = {
  pageSize: 5,
  currentPage: 1,
  sortParams: [
    {
      sort: 'time desc'
    }
  ]
}

須要改造爲
數據結構1blog

數據結構2

經過上圖能夠看出,第二層以後的結構保留字符串格式字符串

改造string

// 數據結構判斷
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) // 即可以了

總結

  • 在使用過程當中,qsstringify有不少種配置,可是我沒有找到適合個人,只能手動改造了
  • 感受難點在於,qs被我認爲無所不能,致使沒能意識到錯誤,其次後臺其實並非很清楚,前臺究竟是如何傳參的,他也沒法明確指出前臺到底該如何傳參,只能不斷嘗試了
相關文章
相關標籤/搜索