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被我认为无所不能,致使没能意识到错误,其次后台其实并非很清楚,前台究竟是如何传参的,他也没法明确指出前台到底该如何传参,只能不断尝试了
相关文章
相关标签/搜索