最近在與后端的項目對接中,接口工具使用了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
