版权声明:本文为博主原创文章,转载请注明出处。 https://blog.csdn.net/qq_24729895/article/details/80367460
最近在与后端的项目对接中,接口工具使用了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
看看他们会采纳- 方法二