axios请求的一些常见操作实战指南

 更新时间:2022年09月18日 08:52:18   作者:翜煜  
axios是一个轻量的HTTP客户端,它基于XMLHttpRequest服务来执行 HTTP请求,支持丰富的配置,支持Promise,支持浏览器端和 Node.js 端,下面这篇文章主要给大家介绍了关于axios请求的一些常见操作,需要的朋友可以参考下

axios封装请求

axios封装常见操作

axios请求时的常见或者说是常用的操作,需要对常规的axios封装做出改变根据不同条件写出不同的效果

axios的二次封装

//我们在做axios封装时,我们引入axios
import axios from 'axios'
//请求拦截器和响应式拦截器就是直接axios.跟上拦截器
axios.interceptors.request.use(
  function (config) {
    // 在发送请求之前做些什么
    return config;
  },
  function (error) {
    // 对请求错误做些什么
    return Promise.reject(error);
  }
);

// 添加响应拦截器
axios.interceptors.response.use(
  function (response) {
    // 2xx 范围内的状态码都会触发该函数。
    // 对响应数据做点什么
    const { data } = response;
    return data;
  },
  function (error) {
    // 超出 2xx 范围的状态码都会触发该函数。
    // 对响应错误做点什么
    return Promise.reject(error);
  }
);
//二次封装是因为项目业务根据不同的功能模块划分为不同的 url 前缀等等,
//我们就可以根据功能模块配置不同的 axios 配置。
import axios from "axios";
const http = axios.create({
  baseURL: process.env.VUE_APP_BASE_URL,
});
// 添加请求拦截器
http.interceptors.request.use(
  function (config) {
    // 在发送请求之前做些什么
    return config;
  },
  function (error) {
    // 对请求错误做些什么
    return Promise.reject(error);
  }
);

// 添加响应拦截器
http.interceptors.response.use(
  function (response) {
    // 2xx 范围内的状态码都会触发该函数。
    // 对响应数据做点什么
    const { data } = response;
    return data;
  },
  function (error) {
    // 超出 2xx 范围的状态码都会触发该函数。
    // 对响应错误做点什么
    return Promise.reject(error);
  }
);

axios的取消重复请求

我们拿二次封装后的axios请求来完成取消重复请求

import axios from "axios";
const http = axios.create({
  baseURL: process.env.VUE_APP_BASE_URL,//公共路径
});
//取消请求
let httplist = []
const removeHttp = config => {
  let index = httplist.findIndex(v => v.url === config.url && v.method === config.method)
  if (index >= 0) {
    //取消请求
    httplist[index].controller.abort()
    //删除当前数据
    httplist.splice(index, 1)
  }
}
http.interceptors.request.use(
  function (config) {
    removeHttp(config)
    //取消操作
     //在push之前遍历数组找到相同的请求取消掉
    const controller = new AbortController()
    config.signal = controller.signal //用来取消操作的key
    config.controller = controller //将控制器绑定到每个请求身上
    httplist.push({ ...config }) //每次的请求加入到数组
    return config
  },
  function (error) {
    // 对请求错误做些什么
    return Promise.reject(error)
  }
)

// 添加响应拦截器
http.interceptors.response.use(
  function (response) {
    // 2xx 范围内的状态码都会触发该函数。
    // 对响应数据做点什么
    const { data } = response;
    return data;
  },
  function (error) {
    // 超出 2xx 范围的状态码都会触发该函数。
    // 对响应错误做点什么
    return Promise.reject(error);
  }
);

axios的错误重复请求

http.interceptors.response.use(undefined, function axiosRetryInterceptor(err) {
  var config = err.config;
  // 如果配置不存在或未设置重试选项,则拒绝
  if (!config || !config.retry) return Promise.reject(err);

  // 设置变量以跟踪重试次数
  config.__retryCount = config.__retryCount || 0;

  // 判断是否超过总重试次数
  if (config.__retryCount >= config.retry) {
    // 返回错误并退出自动重试
    return Promise.reject(err);
  }

  // 增加重试次数
  config.__retryCount += 1;

  //打印当前重试次数
  console.log(config.url + " 自动重试第" + config.__retryCount + "次");

  // 创建新的Promise
  var backoff = new Promise(function (resolve) {
    setTimeout(function () {
      resolve();
    }, config.retryDelay || 1);
  });

  // 返回重试请求
  return backoff.then(function () {
    return axios(config);
  });
});

token失效返回登录页面

token失效返回登录页的原理呢就是在进行axios请求时,对需要拼接token的接口做的响应式拦截中判断请求数据返回的

//我们在做axios封装时,我们引入axios
import axios from 'axios'
//请求拦截器和响应式拦截器就是直接axios.跟上拦截器
//声明一个数组,相当于一个白名单
const whiteList=[
    '/login',
    '/code'
]
//放入不需要拼接token的接口
axios.interceptors.request.use(
  function (config) {
    // 在发送请求之前做些什么
    return config;
  },
  function (error) {
    // 对请求错误做些什么
    return Promise.reject(error);
  }
);

// 添加响应拦截器
axios.interceptors.response.use(
  function (response) {
      if(whiteList.includes(response.config.url)){
      //如果白名单中包含请求的接口不做任何操作
      }else{
      //反之判断返回的数据中的code或是status
      if(response.data.code===401)
      //我这边token失效返回的是401
      sessionStorage.removeItem('token')
      //清空存储的token值
      window.location('/login')
      //跳转登录页
      }
  
    // 2xx 范围内的状态码都会触发该函数。
    // 对响应数据做点什么
    const { data } = response;
    return data;
  },
  function (error) {
    // 超出 2xx 范围的状态码都会触发该函数。
    // 对响应错误做点什么
    return Promise.reject(error);
  }
);

总结

到此这篇关于axios请求的一些常见操作的文章就介绍到这了,更多相关axios请求操作内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • ElementUI实现在下拉列表里面进行搜索功能详解

    ElementUI实现在下拉列表里面进行搜索功能详解

    有时候需要用到下拉列表全选和搜索,下面这篇文章主要给大家介绍了关于ElementUI实现在下拉列表里面进行搜索功能的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2023-04-04
  • elementUI弹窗里的表单重置不生效问题解决

    elementUI弹窗里的表单重置不生效问题解决

    本文主要介绍了elementUI弹窗里的表单重置不生效问题解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-04-04
  • Vue3设置Proxy代理解决跨域问题

    Vue3设置Proxy代理解决跨域问题

    这篇文章主要介绍了Vue3设置Proxy代理解决跨域问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-05-05
  • vue el-input设置必填提示功能(单个与多个)

    vue el-input设置必填提示功能(单个与多个)

    有的功能需要设置必填项,当然也需要判断是不是添上了,下面这篇文章主要给大家介绍了关于vue el-input设置必填提示功能(单个与多个)的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2023-02-02
  • Vue与.net Core 接收List<T>泛型参数

    Vue与.net Core 接收List<T>泛型参数

    这篇文章主要介绍了Vue与.net Core 接收List<T>泛型参数,文章围绕主题展开详细的内容介绍,具有一定的参考价值,需要的小伙伴可以参考一下
    2022-04-04
  • vant自定义引入iconfont图标及字体的方法步骤

    vant自定义引入iconfont图标及字体的方法步骤

    因为vantUI给的图标非常少,为了满足自己的需求,就应该找到一种方法来向vant添加自己自定义的图标,对于自定义图标我第一时间想到的就是阿里的iconfont矢量图库,这篇文章主要给大家介绍了关于vant自定义引入iconfont图标及字体的方法步骤,需要的朋友可以参考下
    2023-09-09
  • 利用Electron简单撸一个Markdown编辑器的方法

    利用Electron简单撸一个Markdown编辑器的方法

    这篇文章主要介绍了利用Electron简单撸一个Markdown编辑器的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2019-06-06
  • vue基于html2canvas和jspdf 生成pdf 、解决jspdf中文乱码问题的方法详解

    vue基于html2canvas和jspdf 生成pdf 、解决jspdf中文乱码问题的方法详解

    这篇文章主要介绍了vue基于html2canvas和jspdf 生成pdf 、解决jspdf中文乱码问题的方法,结合实例形式详细描述了中文乱码问题的原因、解决方法与相关注意事项,需要的朋友可以参考下
    2023-06-06
  • vue+iview的菜单与页签的联动方式

    vue+iview的菜单与页签的联动方式

    这篇文章主要介绍了vue+iview的菜单与页签的联动方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-07-07
  • 浅析Vue 防抖与节流的使用

    浅析Vue 防抖与节流的使用

    防抖节流就是使用定时器 来实现我们的目的。这篇文章通过实例代码给大家介绍vue防抖与节流的使用,感兴趣的朋友跟随小编一起看看吧
    2019-11-11

最新评论