axios基於常見業務場景的二次封裝

2021-09-13 10:46:09 字數 3580 閱讀 7147

axios 是乙個基於 promise 的 http 庫,可以用在瀏覽器和 node.js 中。

在前端框架中的應用也是特別廣泛,不管是vue還是react,都有很多專案用axios作為網路請求庫。

我在最近的幾個專案中都有使用axios,並基於axios根據常見的業務場景封裝了乙個通用的request服務。

業務場景:

全域性請求配置。

get,post,put,delete等請求的promise封裝。

全域性請求狀態管理。

取消重複請求。

路由跳轉取消當前頁面請求。

請求攜帶token,許可權錯誤統一管理。

定義全域性的預設配置

axios.defaults.timeout = 10000 //超時取消請求

axios.defaults.baseurl = process.env.base_url //掛載在process下的環境常量,在我另一篇文章有詳細說明

如何定義多環境常量

自定義配置(非常見業務場景,僅作介紹)

// 建立例項時設定配置的預設值

var instance = axios.create();

// 在例項已建立後修改預設值

instance.defaults.headers.common['authorization'] = auth_token;

優先順序:自定義配置 > 預設配置

請求***及取消重複請求

// 請求列表

const requestlist =

// 取消列表

const canceltoken = axios.canceltoken

let sources = {}

axios.interceptors.request.use((config) => )

//1.判斷請求是否已存在請求列表,避免重複請求,將當前請求新增進請求列表陣列;

if(requestlist.includes(request))else)

} //3.從store中獲取token並新增到請求頭供後端作許可權校驗

const token = store.getters.userinfo.token

if (token)

return config

}, function (error) )

1.請求***中將所有請求新增進請求列表變數,為取消請求及loading狀態管理做準備;當請求列表已存在當前請求則不響應該請求。

2.請求一旦開始,就可以開啟動畫載入效果。

3.使用者登入後可以在請求頭中攜帶token做許可權校驗使用。

響應***

axios.interceptors.response.use(function (response) )

} // 3.統一處理許可權認證錯誤管理

if (response.data.code === 900401)

return response

}, function (error) )

throw new axios.cancel('cancel request')

} else

return promise.reject(error)

})

1.響應返回後將相應的請求從請求列表中刪除

2.當請求列表為空時,即所有請求結束,載入動畫結束

3.許可權認證報錯統一攔截處理

4.取消請求的處理需要結合其他**說明

5.由於專案後端並沒有採用restful風格的介面請求,200以外都歸為網路請求失敗

const request = function (url, params, config, method) , config)).then(response => , err =>  else 

}).catch(err => )

})}const post = (url, params, config = {}) =>

const get = (url, params, config = {}) =>

//3.匯出cancel token列表供全域性路由守衛使用

export

1.axios cancel token api

2.存入需要取消的請求列表匯出給導航守衛使用

3.路由發生變化的時候取消當前頁面還沒有返回結果的請求,在複雜的頁面中請求可能會有很多個,增加取消請求的功能可以讓頁面切換的時候不卡頓。

/src/router.js

...

import from '../service/request'

...router.beforeeach((to, from, next) => )

for (var key in sources)

next()

})

// 引入網路請求庫 

import axios from 'axios'

import store from '../store'

import router from '../router'

// 請求列表

const requestlist =

// 取消列表

const canceltoken = axios.canceltoken

let sources = {}

// axios.defaults.timeout = 10000

axios.defaults.baseurl = process.env.base_url

axios.interceptors.request.use((config) => )

if(requestlist.includes(request))else)

} const token = store.getters.userinfo.token

if (token)

return config

}, function (error) )

axios.interceptors.response.use(function (response) )

} if (response.data.code === 900401)

return response

}, function (error) )

throw new axios.cancel('cancel request')

} else

return promise.reject(error)

})const request = function (url, params, config, method) , config)).then(response => , err => else

}).catch(err => )

})}const post = (url, params, config = {}) =>

const get = (url, params, config = {}) =>

export

以上。

excel 時間戳 基於業務場景下的Excel使用

背景 如何 基於以下業務邏輯,本文將利用excel集中練習 2,3,4 三個方面,初步掌握excel基本操作和初步理解基於業務場景的資料分析步驟.資料集 1 熟悉資料集 1 在 和天貓平台上購買嬰兒用品的使用者資料集,資料集包含兩個excel檔案 表1購買商品 sample sam tianchi ...

Vue基於axios的二次封裝

主要目的 速度快,好維護,好修改,好擴充套件,好開發 模組分析 初始化模組 請求生成模組 請求控制模組 請求處理模組 設計思路 功能分析 板塊梳理 架構基礎 功能構建 直接上 吧 import axios from axios main.js檔案 注入main.js import a from by...

多租戶使用者管理系統中常見的業務場景

在多租戶使用者管理系統中,常見的業務場景有以下幾種 使用者註冊 使用者通過填寫手機號碼等資訊,進行註冊操作 該場景這重驗證使用者手機號碼的有效性,一般通過簡訊驗證碼進行驗證 租戶註冊 使用者通過填寫租戶的相關資訊,註冊租戶,該使用者預設為租戶的超級管理員。該場景注重收集租戶的相關資訊 使用者登入 通...