背景

在hr系统中,封装get和post请求都手动进行了自定义请求头
image.pngimage.png
然后根据请求头来判断是否需要进行qs转换
image.png
因为某些原因我们想要直接使用axios而不是封装好的this.post,我们发现,在不指定headers的情况下,如果我们手动先把参数qs转换一下,请求头会自动变成formdata的形式,如果我们不转换,则请求头又会自动变成json的形式,很是奇怪???

原因

axios源码中有一段代码:这回真相了

  1. if (utils.isURLSearchParams(data)) {
  2. setContentTypeIfUnset(headers, 'application/x-www-form-urlencoded;charset=utf-8');
  3. return data.toString();
  4. }
  5. if (utils.isObject(data)) {
  6. setContentTypeIfUnset(headers, 'application/json;charset=utf-8');
  7. return JSON.stringify(data);
  8. }

解决

配置aixos的时候,先实例化一个axios,在实例化的同事设定一个默认的请求头即可

  1. import defaultAxios from 'axios';
  2. let axios = defaultAxios.create({
  3. headers: {'Content-Type': 'application/x-www-form-urlencoded;charset=UTF-8'}
  4. })