Axios之Content-Type
- Content-Type属性不需要手动设置: Axios会根据post请求的data数据类型, 自动设置Content-Type
Axios会自动设置Content-Type
1. 默认值application/json
- 场景: 请求数据data为对象时, 不需要任何处理
axios({
url:"/loadData",
method:"post",
data:{
name:"tom"
}
}).then(res => {
console.log(res)
})
- 场景: 当请求数据data为字符串或URLSearchParams对象时
- URLSearchParams API
var params = new URLSearchParams();
params.append('param1', 'value1');
params.append('param2', 'value2');
axios({
url:"/loadData",
method:"post",
data:params
}).then(res =>{
console.log(res)
})
- 使用qs库将对象转成查询字符串
import Qs from 'qs';
let data = Qs.stringify({name:"Tom"})
axios({
url:"/loadData",
method:"post",
data:data
}).then(res => {
console.log(res)
})
- 场景: 上传文件时, 请求数据data转为FormData类型时
let params = new FormData();
params.append("name", "Tom");
dparamsata.append("age", "18");
axios({
url:"/loadData",
method:"post",
data:params
}).then(res =>{
console.log(res)
})
- 处理: 统一将data数据格式化为查询字符串
- 缺点: 所有post请求都会使用
application/x-www-form-urlencoded
, 如果需要Content-Type其他类型时就需要单独处理请求了, 比如上传文件时需要使用multipart/form-data;
let instance = axios.create({
// 发送前, 修改请求数据, Content-Type会根据修改后的数据自动设置
transformRequest: [
function(data, headers) {
return Qs.stringify(data);
}
]
});
建议:
- 与后端沟通一致, 统一使用
application/json
类型
- 不影响使用
multipart/form-data
类型上传文件
- 并且json数据类型对于多层嵌套的数据更友好