背景
在hr系统中,封装get和post请求都手动进行了自定义请求头
然后根据请求头来判断是否需要进行qs转换
因为某些原因我们想要直接使用axios而不是封装好的this.post,我们发现,在不指定headers的情况下,如果我们手动先把参数qs转换一下,请求头会自动变成formdata的形式,如果我们不转换,则请求头又会自动变成json的形式,很是奇怪???
原因
axios源码中有一段代码:这回真相了
if (utils.isURLSearchParams(data)) {
setContentTypeIfUnset(headers, 'application/x-www-form-urlencoded;charset=utf-8');
return data.toString();
}
if (utils.isObject(data)) {
setContentTypeIfUnset(headers, 'application/json;charset=utf-8');
return JSON.stringify(data);
}
解决
配置aixos的时候,先实例化一个axios,在实例化的同事设定一个默认的请求头即可
import defaultAxios from 'axios';
let axios = defaultAxios.create({
headers: {'Content-Type': 'application/x-www-form-urlencoded;charset=UTF-8'}
})