工作总结:axios获取params,根据参数进行请求拦截

939 阅读1分钟

因为业务需求变更,本来必传的字段但是但是由于数据的问题,有时候会获取不到。后台的接口对数据进行的必传的判断,因为接口较大,如果一个一个修改实在麻烦,决定让前端进行一些字段的判断,如果获取不到,直接需求请求。

一、axios获取参数

直接使用config是获取不到params这个参数的。
请求部分:

export function fetchList(params){
  return request({
    url:'/alarm/alarmResult/page',
    method:'get',
    params
  })
}

想要获取这个params,在请求拦截器里打印一下config。

微信图片_20220707160816.png 值得注意的是paramsSeralizer函数的返回参数是params。打印发一次啊,可以看到请求的数据:

微信图片_20220707161155.png

二、取消的逻辑

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' })
  }
}