欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

axios請(qǐng)求的一些常見操作實(shí)戰(zhàn)指南

 更新時(shí)間:2022年09月18日 08:52:18   作者:翜煜  
axios是一個(gè)輕量的HTTP客戶端,它基于XMLHttpRequest服務(wù)來執(zhí)行 HTTP請(qǐng)求,支持豐富的配置,支持Promise,支持瀏覽器端和 Node.js 端,下面這篇文章主要給大家介紹了關(guān)于axios請(qǐng)求的一些常見操作,需要的朋友可以參考下

axios封裝請(qǐng)求

axios封裝常見操作

axios請(qǐng)求時(shí)的常見或者說是常用的操作,需要對(duì)常規(guī)的axios封裝做出改變根據(jù)不同條件寫出不同的效果

axios的二次封裝

//我們?cè)谧鯽xios封裝時(shí),我們引入axios
import axios from 'axios'
//請(qǐng)求攔截器和響應(yīng)式攔截器就是直接axios.跟上攔截器
axios.interceptors.request.use(
  function (config) {
    // 在發(fā)送請(qǐng)求之前做些什么
    return config;
  },
  function (error) {
    // 對(duì)請(qǐng)求錯(cuò)誤做些什么
    return Promise.reject(error);
  }
);

// 添加響應(yīng)攔截器
axios.interceptors.response.use(
  function (response) {
    // 2xx 范圍內(nèi)的狀態(tài)碼都會(huì)觸發(fā)該函數(shù)。
    // 對(duì)響應(yīng)數(shù)據(jù)做點(diǎn)什么
    const { data } = response;
    return data;
  },
  function (error) {
    // 超出 2xx 范圍的狀態(tài)碼都會(huì)觸發(fā)該函數(shù)。
    // 對(duì)響應(yīng)錯(cuò)誤做點(diǎn)什么
    return Promise.reject(error);
  }
);
//二次封裝是因?yàn)轫?xiàng)目業(yè)務(wù)根據(jù)不同的功能模塊劃分為不同的 url 前綴等等,
//我們就可以根據(jù)功能模塊配置不同的 axios 配置。
import axios from "axios";
const http = axios.create({
  baseURL: process.env.VUE_APP_BASE_URL,
});
// 添加請(qǐng)求攔截器
http.interceptors.request.use(
  function (config) {
    // 在發(fā)送請(qǐng)求之前做些什么
    return config;
  },
  function (error) {
    // 對(duì)請(qǐng)求錯(cuò)誤做些什么
    return Promise.reject(error);
  }
);

// 添加響應(yīng)攔截器
http.interceptors.response.use(
  function (response) {
    // 2xx 范圍內(nèi)的狀態(tài)碼都會(huì)觸發(fā)該函數(shù)。
    // 對(duì)響應(yīng)數(shù)據(jù)做點(diǎn)什么
    const { data } = response;
    return data;
  },
  function (error) {
    // 超出 2xx 范圍的狀態(tài)碼都會(huì)觸發(fā)該函數(shù)。
    // 對(duì)響應(yīng)錯(cuò)誤做點(diǎn)什么
    return Promise.reject(error);
  }
);

axios的取消重復(fù)請(qǐng)求

我們拿二次封裝后的axios請(qǐng)求來完成取消重復(fù)請(qǐng)求

import axios from "axios";
const http = axios.create({
  baseURL: process.env.VUE_APP_BASE_URL,//公共路徑
});
//取消請(qǐng)求
let httplist = []
const removeHttp = config => {
  let index = httplist.findIndex(v => v.url === config.url && v.method === config.method)
  if (index >= 0) {
    //取消請(qǐng)求
    httplist[index].controller.abort()
    //刪除當(dāng)前數(shù)據(jù)
    httplist.splice(index, 1)
  }
}
http.interceptors.request.use(
  function (config) {
    removeHttp(config)
    //取消操作
     //在push之前遍歷數(shù)組找到相同的請(qǐng)求取消掉
    const controller = new AbortController()
    config.signal = controller.signal //用來取消操作的key
    config.controller = controller //將控制器綁定到每個(gè)請(qǐng)求身上
    httplist.push({ ...config }) //每次的請(qǐng)求加入到數(shù)組
    return config
  },
  function (error) {
    // 對(duì)請(qǐng)求錯(cuò)誤做些什么
    return Promise.reject(error)
  }
)

// 添加響應(yīng)攔截器
http.interceptors.response.use(
  function (response) {
    // 2xx 范圍內(nèi)的狀態(tài)碼都會(huì)觸發(fā)該函數(shù)。
    // 對(duì)響應(yīng)數(shù)據(jù)做點(diǎn)什么
    const { data } = response;
    return data;
  },
  function (error) {
    // 超出 2xx 范圍的狀態(tài)碼都會(huì)觸發(fā)該函數(shù)。
    // 對(duì)響應(yīng)錯(cuò)誤做點(diǎn)什么
    return Promise.reject(error);
  }
);

axios的錯(cuò)誤重復(fù)請(qǐng)求

http.interceptors.response.use(undefined, function axiosRetryInterceptor(err) {
  var config = err.config;
  // 如果配置不存在或未設(shè)置重試選項(xiàng),則拒絕
  if (!config || !config.retry) return Promise.reject(err);

  // 設(shè)置變量以跟蹤重試次數(shù)
  config.__retryCount = config.__retryCount || 0;

  // 判斷是否超過總重試次數(shù)
  if (config.__retryCount >= config.retry) {
    // 返回錯(cuò)誤并退出自動(dòng)重試
    return Promise.reject(err);
  }

  // 增加重試次數(shù)
  config.__retryCount += 1;

  //打印當(dāng)前重試次數(shù)
  console.log(config.url + " 自動(dòng)重試第" + config.__retryCount + "次");

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

  // 返回重試請(qǐng)求
  return backoff.then(function () {
    return axios(config);
  });
});

token失效返回登錄頁面

token失效返回登錄頁的原理呢就是在進(jìn)行axios請(qǐng)求時(shí),對(duì)需要拼接token的接口做的響應(yīng)式攔截中判斷請(qǐng)求數(shù)據(jù)返回的

//我們?cè)谧鯽xios封裝時(shí),我們引入axios
import axios from 'axios'
//請(qǐng)求攔截器和響應(yīng)式攔截器就是直接axios.跟上攔截器
//聲明一個(gè)數(shù)組,相當(dāng)于一個(gè)白名單
const whiteList=[
    '/login',
    '/code'
]
//放入不需要拼接token的接口
axios.interceptors.request.use(
  function (config) {
    // 在發(fā)送請(qǐng)求之前做些什么
    return config;
  },
  function (error) {
    // 對(duì)請(qǐng)求錯(cuò)誤做些什么
    return Promise.reject(error);
  }
);

// 添加響應(yīng)攔截器
axios.interceptors.response.use(
  function (response) {
      if(whiteList.includes(response.config.url)){
      //如果白名單中包含請(qǐng)求的接口不做任何操作
      }else{
      //反之判斷返回的數(shù)據(jù)中的code或是status
      if(response.data.code===401)
      //我這邊token失效返回的是401
      sessionStorage.removeItem('token')
      //清空存儲(chǔ)的token值
      window.location('/login')
      //跳轉(zhuǎn)登錄頁
      }
  
    // 2xx 范圍內(nèi)的狀態(tài)碼都會(huì)觸發(fā)該函數(shù)。
    // 對(duì)響應(yīng)數(shù)據(jù)做點(diǎn)什么
    const { data } = response;
    return data;
  },
  function (error) {
    // 超出 2xx 范圍的狀態(tài)碼都會(huì)觸發(fā)該函數(shù)。
    // 對(duì)響應(yīng)錯(cuò)誤做點(diǎn)什么
    return Promise.reject(error);
  }
);

總結(jié)

到此這篇關(guān)于axios請(qǐng)求的一些常見操作的文章就介紹到這了,更多相關(guān)axios請(qǐng)求操作內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • ElementUI實(shí)現(xiàn)在下拉列表里面進(jìn)行搜索功能詳解

    ElementUI實(shí)現(xiàn)在下拉列表里面進(jìn)行搜索功能詳解

    有時(shí)候需要用到下拉列表全選和搜索,下面這篇文章主要給大家介紹了關(guān)于ElementUI實(shí)現(xiàn)在下拉列表里面進(jìn)行搜索功能的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-04-04
  • elementUI彈窗里的表單重置不生效問題解決

    elementUI彈窗里的表單重置不生效問題解決

    本文主要介紹了elementUI彈窗里的表單重置不生效問題解決,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-04-04
  • Vue3設(shè)置Proxy代理解決跨域問題

    Vue3設(shè)置Proxy代理解決跨域問題

    這篇文章主要介紹了Vue3設(shè)置Proxy代理解決跨域問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-05-05
  • vue?el-input設(shè)置必填提示功能(單個(gè)與多個(gè))

    vue?el-input設(shè)置必填提示功能(單個(gè)與多個(gè))

    有的功能需要設(shè)置必填項(xiàng),當(dāng)然也需要判斷是不是添上了,下面這篇文章主要給大家介紹了關(guān)于vue?el-input設(shè)置必填提示功能(單個(gè)與多個(gè))的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-02-02
  • Vue與.net?Core?接收List<T>泛型參數(shù)

    Vue與.net?Core?接收List<T>泛型參數(shù)

    這篇文章主要介紹了Vue與.net?Core?接收List<T>泛型參數(shù),文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下
    2022-04-04
  • vant自定義引入iconfont圖標(biāo)及字體的方法步驟

    vant自定義引入iconfont圖標(biāo)及字體的方法步驟

    因?yàn)関antUI給的圖標(biāo)非常少,為了滿足自己的需求,就應(yīng)該找到一種方法來向vant添加自己自定義的圖標(biāo),對(duì)于自定義圖標(biāo)我第一時(shí)間想到的就是阿里的iconfont矢量圖庫,這篇文章主要給大家介紹了關(guān)于vant自定義引入iconfont圖標(biāo)及字體的方法步驟,需要的朋友可以參考下
    2023-09-09
  • 利用Electron簡(jiǎn)單擼一個(gè)Markdown編輯器的方法

    利用Electron簡(jiǎn)單擼一個(gè)Markdown編輯器的方法

    這篇文章主要介紹了利用Electron簡(jiǎn)單擼一個(gè)Markdown編輯器的方法,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2019-06-06
  • vue基于html2canvas和jspdf?生成pdf?、解決jspdf中文亂碼問題的方法詳解

    vue基于html2canvas和jspdf?生成pdf?、解決jspdf中文亂碼問題的方法詳解

    這篇文章主要介紹了vue基于html2canvas和jspdf?生成pdf?、解決jspdf中文亂碼問題的方法,結(jié)合實(shí)例形式詳細(xì)描述了中文亂碼問題的原因、解決方法與相關(guān)注意事項(xiàng),需要的朋友可以參考下
    2023-06-06
  • vue+iview的菜單與頁簽的聯(lián)動(dòng)方式

    vue+iview的菜單與頁簽的聯(lián)動(dòng)方式

    這篇文章主要介紹了vue+iview的菜單與頁簽的聯(lián)動(dòng)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-07-07
  • 淺析Vue 防抖與節(jié)流的使用

    淺析Vue 防抖與節(jié)流的使用

    防抖節(jié)流就是使用定時(shí)器 來實(shí)現(xiàn)我們的目的。這篇文章通過實(shí)例代碼給大家介紹vue防抖與節(jié)流的使用,感興趣的朋友跟隨小編一起看看吧
    2019-11-11

最新評(píng)論