天天饱

如果你只做自己能力范围之内的事情,就永远没法进步

axios的get请求无法设置Content-Type

最近在与后端的项目对接中,接口工具使用了axios这个东西。怎么说那 ,反正有很多坑,在后端的请求中要设置GET 请求中要设置header中的Content-Typeapplication/json; charset=utf-8

我目视了两秒钟很简单的嘛

var $http  = axios.create({
  baseURL: url,
  headers: {
    'Content-Type': 'application/json; charset=utf-8'
  }
  ...
})

  

洒洒水啦 ,是不是很容易

然后。。然后。。我艹what fuck,一看请求中header中没得这个玩意儿,但是除了Content-Type都是可以设置的

此时此刻一万句mmp要将,百度一大推也都没啥用

然后本人就去读了一哈源码,npm包中的源码 axios/lib/xhr.js,写了什么,我艹 他写了什么

118------129行

    // Add headers to the request
    if ('setRequestHeader' in request) {
      utils.forEach(requestHeaders, function setRequestHeader(val, key) {
        if (typeof requestData === 'undefined' && key.toLowerCase() === 'content-type') {
          // Remove Content-Type if data is undefined
          delete requestHeaders[key];
        } else {
          // Otherwise add header to the request
          request.setRequestHeader(key, val);
        }
      });
    }

  

然后看这个if判段, 哔了狗了

然后就有那么几个解决办法,下面我写一写哈

  • 方法一
//修改这段代码
    // Add headers to the request
    if ('setRequestHeader' in request) {
      utils.forEach(requestHeaders, function setRequestHeader(val, key) {
        //if (typeof requestData === 'undefined' && key.toLowerCase() === 'content-type') {
          // Remove Content-Type if data is undefined
          //delete requestHeaders[key];
        //} else {
          // Otherwise add header to the request
          request.setRequestHeader(key, val);
        //}
      });
    }

  

好了,行了行了,现在可以了

  

  • 方法二 
    我们不能随随便便改人家的npm包啊,万一下次别人安装的时候那不是又要去改,咋办呢,看下面这个方法 
var $http
// 添加一个新的axios实例
$http = axios.create({
  baseURL: url,
  headers: {
    'Content-Type': 'application/json; charset=utf-8'
  }
})
// 添加请求拦截器
$http.interceptors.request.use(function (config) {
  // 在发送请求之前做些什么
  // 随便写个值 绕过if判段
  if (config.method == 'get') {
    config.data = true
  }
  config.headers['H-TOKEN'] = '111'
  return config;
}, function (error) {
  // 对请求错误做些什么
  return Promise.reject(error);
});

  

现在哥哥告诉你,随便在get请求中设置header那还不是简简单单的事情

  

axios这么做的原因, 是因为GET请求本身是不需要Content-type,塔属于简单请求

 

原文作者:echone_wenqian

原文地址:https://blog.csdn.net/qq_24729895/article/details/80367460

posted @ 2019-04-12 17:55  天天饱  阅读(5604)  评论(1编辑  收藏  举报