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