1. 程式人生 > >Axios GET 不能設定Content-Type

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,塔屬於簡單請求

現在去官網提個bug看看他們會採納