因为业务需求变更,本来必传的字段但是但是由于数据的问题,有时候会获取不到。后台的接口对数据进行的必传的判断,因为接口较大,如果一个一个修改实在麻烦,决定让前端进行一些字段的判断,如果获取不到,直接需求请求。
一、axios获取参数
直接使用config是获取不到params这个参数的。
请求部分:
export function fetchList(params){
return request({
url:'/alarm/alarmResult/page',
method:'get',
params
})
}
想要获取这个params,在请求拦截器里打印一下config。
值得注意的是
paramsSeralizer函数的返回参数是params。打印发一次啊,可以看到请求的数据:
二、取消的逻辑
let flag = false
config.paramsSerializer = function (params) {
///判断逻辑
flag = true
return ...
}
if(flag){
cancel
}
但是这么写是有问题的,因为flag的判断是一直为false,config的paramsSerializer 的函数是处理params数据的,应该在最后请求前执行,所以经过修改应该是:
config.paramsSerializer = function (params) {
///判断逻辑
cancel
return ...
}
return config
三、整理代码
if (config.method === 'get') {
config.paramsSerializer = function (params) {
let keys = Object.keys(params)
let arr = ['siteId','wellId','device','wellCode']
for (let i = 0; i<arr.length;i++){
if(keys.indexOf(arr[i]) > -1 && (params[arr[i]] === undefined || params[arr[i]] === '')){
config.cancelToken = new CancelToken((c) => {
c()
})
break
}
}
return qs.stringify(params, { arrayFormat: 'repeat' })
}
}