Axios GET 不能設定Content-Type
阿新 • • 發佈:2019-02-06
最近在與後端的專案對接中,介面工具使用了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
,塔屬於簡單請求
現在去官網提個
bug
看看他們會採納