最近在與后端的項目對接中,接口工具使用了axios
這個東西。怎么說那 ,反正有很多坑,在后端的請求中要設置GET
請求中要設置header
中的Content-Type
為application/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