Axios 数据序列化
Axios 如何处理 JSON、x-www-form-urlencoded 和 multipart/form-data。
#concept
#growing
#network
#browser
#http
#javascript
#axios
[!info] related notes
- 所属 MOC: HTTP 与前端网络请求
- 上位概念: Axios
- 前置概念: Axios 请求配置
- 并列概念: Axios 响应结构, Axios 错误模型
Axios 数据序列化
一句话定义
Axios 会把普通对象默认按 JSON 发送,但也支持 URL 编码和 multipart 表单。
核心内容
JSON
await axios.post('/user', { name: 'Tom' })
Axios 默认会把普通对象按 JSON 处理;更细的转换可以交给 transformRequest / transformResponse。
application/x-www-form-urlencoded
适合传统表单或后端明确要求 URL 编码的接口。简单字符串字段可显式用 URLSearchParams:
const body = new URLSearchParams({ name: 'Tom', city: '北京' });
await axios.post('/user', body);
嵌套对象和数组的编码方式需要与后端约定,不能把任意对象直接交给 URLSearchParams 构造器后期待保留结构。Axios 的自动表单序列化还受 Content-Type、版本和配置影响。
multipart/form-data
适合文件上传与混合字段提交。浏览器中的示例:
const body = new FormData();
body.append('name', 'Tom');
body.append('file', file); // file 是文件选择器提供的 File
await axios.post('/upload', body);
浏览器原生 FormData 通常让 adapter/浏览器生成带 boundary 的 Content-Type,不要手工拼一个缺 boundary 的头。全局固定 application/json 的实例不应原样用于所有上传路径;Node 的 FormData、文件流与 adapter 支持需按版本核对。
常见直觉
params走 URLdata用于请求体;GET/HEAD 的可用行为取决于协议和 adapter,不应依赖 GET body- 表单和文件上传要注意
Content-Type
边界与易混淆点
- JSON 不等于表单编码
- 文件上传不只是把对象塞进
data - Node 和浏览器对流式/文件处理细节不同
最短记忆方式
- 默认 JSON
- 表单可 URL 编码
- 文件上传用 multipart