最近在与后端的项目对接中,接口工具使用了 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看看他们会采纳
版权声明:本文为qq_24729895原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。