Axios Params 序列化解决方案

Axios Params 序列化解决方案(paramsSerializer

这篇笔记解决什么问题

当你遇到下面任一情况时,这篇笔记可以直接给出方案:

  • 前端传了数组/对象,后端却"收不到"或结构不对
  • 同一个参数在不同接口上格式要求不一致([]、下标、重复 key)
  • 你不确定该用 Axios 内置配置,还是引入 qs

30 秒选型(先看这里)

  • 只用扁平对象 + 普通数组:用 Axios 内置 paramsSerializer.indexes
  • 有复杂嵌套对象、严格后端协议:用 qs.stringify
  • 想团队统一风格:在 axios 实例里一次性配置,不要散落在每个接口

paramsSerializer 是什么(定义)

paramsSerializer 用来控制 Axios 如何把 params 序列化成 URL query string

  • 作用对象:params
  • 不作用于:data(请求体)、路径参数(如 /users/:id
  • 即使是 POST/PUT,只要传了 params,它也会生效

示例:

ts 复制代码
axios.post('/users', data, {
  params: { page: 1 },
})

Axios 内置三种序列化方式(数组)

假设:

ts 复制代码
params = { tags: ['red', 'blue'] }
配置 结果 适用场景
indexes: false tags[]=red&tags[]=blue 常见 PHP/部分后端习惯(Axios 默认)
indexes: true tags[0]=red&tags[1]=blue 后端需要明确索引
indexes: null tags=red&tags=blue 后端按重复 key 解析数组

示例:

ts 复制代码
axios.get('/users', {
  params: { tags: ['red', 'blue'] },
  paramsSerializer: { indexes: null },
})

什么时候需要 qs

如果你有以下需求,建议直接用 qs

  • 嵌套对象较深(如 filter[name]=tom
  • 后端对参数格式有明确规范
  • 需要统一控制空值、编码、数组格式、键排序

示例:

ts 复制代码
import qs from 'qs'

axios.get('/users', {
  params: { filter: { name: 'tom' }, tags: ['a', 'b'] },
  paramsSerializer: {
    serialize: (params) => qs.stringify(params, { arrayFormat: 'repeat' }),
  },
})

推荐落地方式(项目级)

把策略放到请求实例,统一生效:

ts 复制代码
const request = axios.create({
  baseURL: '/api',
  paramsSerializer: {
    indexes: null,
  },
})

一句话结论

paramsSerializer 只负责"params 怎么拼到 URL 上";内置够用就别加库,复杂协议再用 qs

相关推荐
mCell6 小时前
如何零成本搭建个人站点
前端·程序员·github
mCell7 小时前
为什么 Memo Code 先做 CLI:以及终端输入框到底有多难搞
前端·设计模式·agent
恋猫de小郭8 小时前
AI 在提高你工作效率的同时,也一直在增加你的疲惫和焦虑
前端·人工智能·ai编程
少云清8 小时前
【安全测试】2_客户端脚本安全测试 _XSS和CSRF
前端·xss·csrf
银烛木8 小时前
黑马程序员前端h5+css3
前端·css·css3
m0_607076608 小时前
CSS3 转换,快手前端面试经验,隔壁都馋哭了
前端·面试·css3
听海边涛声8 小时前
CSS3 图片模糊处理
前端·css·css3
IT、木易8 小时前
css3 backdrop-filter 在移动端 Safari 上导致渲染性能急剧下降的优化方案有哪些?
前端·css3·safari
0思必得08 小时前
[Web自动化] Selenium无头模式
前端·爬虫·selenium·自动化·web自动化
anOnion8 小时前
构建无障碍组件之Dialog Pattern
前端·html·交互设计