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


DiracKeeko
125 声望2 粉丝