问题描述
最近开发某医院医生站系统遇到一个问题,就是通过axios给本地程序接口发送一个xml格式的报文内容,程序会驱动硬件刷卡机读出当前的卡号,本来就是一个很简单axios.post()的格式请求,只是把headers内的Content-type换成application/xml格式就行,但是实际开发时一直出现请求发出去,一直处于pending状态,但是看了本地程序的日志,已经接收到了请求,但是一直解析失败。
下面是封装的Api所调用的方法:
这个是我之前写的请求格式
export function getKaHaoBySheBaoOrFace(data) {
return requestXml({
url: "/api",
method: "post",
timeout: 60000,
headers: {
"Content-Type": "application/xml"
},
data
})
}
这个是我写的请求拦截部分:
这个是我写得请求拦截,
instance.interceptors.request.use((config) => { // 配置请求头
if (store.getters.token) {
// let each request carry token
// ['X-Token'] is a custom headers key
// please modify it according to the actual situation
config.headers['token'] = getToken()
// windowID
config.headers['windowID'] = getGuId()
config.headers['X_Real_IP'] = '10.10.46.5'
}
return config;
}, (error) => { return Promise.reject(error); });
全程没有任何问题,而且header也加进去了,但是请求就是失败的,后端接受到到的参数就是解析不成功,然后也怀疑过是不是代理的地方出了什么问题,排查之后发现并没有问题。
排查并解决问题
后面排查之后,重新修改了请求拦截器,代码如下:
//http request 拦截器
instance.interceptors.request.use((config) => { // 配置请求头
config.headers = {
"Content-Type": "application/xml", // 传参方式xml
};
if (store.getters.token) {
// let each request carry token
// ['X-Token'] is a custom headers key
// please modify it according to the actual situation
config.headers['token'] = getToken()
// windowID
config.headers['windowID'] = getGuId()
config.headers['X_Real_IP'] = '10.10.46.5'
}
return config;
}, (error) => { return Promise.reject(error); });
其实就是把header的content-type 写在这里了,这样就可以通了,其实我后面试了一下,只要保留这个header对象,里面不写这个格式也是可以的,但是只要把这个header={}去掉,就不行了,代码如下:
这样也是可以的
//http request 拦截器
instance.interceptors.request.use((config) => { // 配置请求头
config.headers = {};
if (store.getters.token) {
// let each request carry token
// ['X-Token'] is a custom headers key
// please modify it according to the actual situation
config.headers['token'] = getToken()
// windowID
config.headers['windowID'] = getGuId()
config.headers['X_Real_IP'] = '10.10.46.5'
}
return config;
}, (error) => { return Promise.reject(error); });
结果
浏览器这边显示响应成功了,后端也可以读取到我发送的数据。
结论猜测
这个问题发生的有点偏门,我是没想到的,我猜可能时header合并出错的原因,当然还需要我去axios的文档里面查查看,暂时时这样解决的,如果有人知道也可以给我留言,万分感谢。