当前位置:首页 > 谈天说地

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

34资源网2022-09-19341

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请求操作内容请搜索萬仟网以前的文章或继续浏览下面的相关文章希望大家以后多多支持萬仟网!

看完文章,还可以扫描下面的二维码下载快手极速版领4元红包

快手极速版二维码

快手极速版新人见面礼

除了扫码领红包之外,大家还可以在快手极速版做签到,看视频,做任务,参与抽奖,邀请好友赚钱)。

邀请两个好友奖最高196元,如下图所示:

快手极速版邀请好友奖励

扫描二维码推送至手机访问。

版权声明:本文由34楼发布,如需转载请注明出处。

本文链接:https://www.34l.com/post/22281.html

分享给朋友:

相关文章

打工人是什么梗出自哪里?打工人的梗为什么这么火?

打工人是什么梗出自哪里?打工人的梗为什么这么火?

近日,看到打工人这词很火,很多小伙伴肯定和我一样,都想知道“打工人”这个词为什么这么火吧?那么,接下来我就跟大家说说打工人是什么梗出自哪里?这词出自哪里无从考证,不过肯定是某些有头脑的网友发明的,至于出自哪位网友?我们一起来了解相关情况吧。…

视频号加粉多少会被推荐?视频号制作方法分享

视频号加粉多少会被推荐?视频号制作方法分享

今天下午,视频号突然暂停申请,让原本打算在视频号大干一场的运营者们感到懵圈。不过据业内人士透露,此次暂停并“不会太久”,很快就会再次上线。…

lenovo手机网上哪里买(联想旗舰店官网商城)

lenovo手机网上哪里买(联想旗舰店官网商城)

昨晚联想拯救者电竞手机 2 Pro 正式发布,搭载骁龙 888 旗舰芯片、八指操控体系,配备 6.92 英寸 AMOLED 144Hz 三星定制电竞无孔屏幕,5500mAh 容量电池,堪称 “堆料狂魔”,这款手机于今日 10:00 正式开售…

华为小米革了康佳长虹们的命,海信怎么办?

华为小米革了康佳长虹们的命,海信怎么办?

编者按:本文来自陆玖财经,创业邦经授权发布。 电视行业真正需要面对的不是“大屏好还是小屏好”,用激光、OLED还是Mini LED之类的技术路线之争,而是一旦被视为“智能终端”,从产品形态到竞争模式的翻天覆地。 近日,海信子品牌Vidda…

火了12年,“假洋鬼子”终于翻车了

火了12年,“假洋鬼子”终于翻车了

图源:摄图网 编者按:本文来自微信公众号格隆汇财经热点(ID:glh_finance),作者:万连山,创业邦经授权转载 你肯定看到过这样一幅广告:一个与乔布斯颇有几分相似的神秘洋老头,戴着金丝眼镜,有时叼着烟斗,有时没有,出现在各大高铁站和…

已覆盖70%前十大快递/快运客户,商用车后市场玩家「大车队长」眼中的轮胎“生命力”

已覆盖70%前十大快递/快运客户,商用车后市场玩家「大车队长」眼中的轮胎“生命力”

2020年,商用车后市场头部创业公司「大车队长」正式完成了数千万元人民币A轮融资,由经纬中国领投。融资后的一年里,大车队长成长迅速,还发布了全新的“5113”战略,即5年服务100万台车、1000万个轮位、完成300亿元营收。 截至目前,大…