axios 原版本 0.19.2,升级到0.27.2 出现了部分post请求发送异常的情况。
经查发现虽然大版本号同为0,但是0.27.2的内部逻辑有变更。
(0.27.2版本去掉了一些0.19.2版本中的对config的兼容性处理),导致0.19.2中不规范的api使用方式在0.27.2中无法生效。
问题发生在使用类似于下面这种形式发送post请求。
axios.post(url[, data[, config]])
一个正常发送的post请求是这样的
axios.post('/baseUrl/info',
{
fundId: "000001",
type: "bond"
},
{
headers: {
"Content-Type": "application/json"
}
timeout: 8000
}
);
简化一下场景,想发送一个post请求
const data = {
fundId: "000001",
type: "bond"
};
// 正常使用
axios.post('/baseUrl/info', data);
在0.19.2版本中,下面这段代码
const data = {
fundId: "000001",
type: "bond"
};
// 不规范使用
axios.post('/baseUrl/info', {}, {data});
也可以正常发送post请求。 (在0.19.2中 data作为config中的key,会被解析为reqBody)
注意:
这是axios@0.19.2对config.data字段的兼容处理,axios的文档中,明确的指出data应该使用axios.post(url[, data[, config]]) 这种方式发送。
在axios@0.27.2中,实测这种对config中data字段的兼容性处理被删除了。
即 axios@0.27.2中,当data作为config的key放置在第三个参数的位置传入post方法,这个config.data参数不会被解析。
因此使用 axios.post('/baseUrl/info', {}, {data}); 形式传入data会丢失reqBody。
同步更新到自己的语雀
https://www.yuque.com/dirackeeko/blog/mgfhw7l6bmst4nmf
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。