axios+ts封裝

http.ts

import axios from 'axios'
import type { AxiosInstance, AxiosRequestConfig, AxiosResponse } from 'axios'
import qs from 'qs'/*** 擴展AxiosRequestConfig,增加一些自定義的屬性* isAuth: 自定義的參數中,用來判斷是否攜帶token  因為AxiosRequestConfig本身定義的有 auth 所以這里使用 isAuth;*/
interface AxiosRequestConfigExt extends AxiosRequestConfig {isAuth?: boolean //是否攜帶tokenshowLoading?: boolean //是否顯示加載框error401toLogin?: boolean //是否將401錯誤重定向到登錄頁面dataType?: string //數據類型queryData: any //查詢參數
}let timerId: number = 0class Http {axios: AxiosInstance = nullconstructor() {this.axios = axios.create({baseURL: 'http://localhost:5173',timeout: 10000,})//請求攔截器this.axios.interceptors.request.use((config: AxiosRequestConfig): AxiosRequestConfig => {return config},(error: any) => {console.log(error)return Promise.reject(error)},)//響應攔截器this.axios.interceptors.response.use((response: AxiosResponse) => {return response.data},(error: any) => {console.log(error)let message = '網絡錯誤'if (error.response.status === 401) {message = '未登錄或登錄已過期,請重新登錄'// 這里可以重定向到登錄頁面window.location.href = '/login'}if (error.response.status === 403) {message = '權限不足,請聯系管理員'}if (error.response.status === 404) {message = '請求地址不存在'}if (error.response.status === 500) {message = '服務器內部錯誤'}console.log(message)//彈出提示框//showToast(message)return Promise.reject(error)},)}request<T>(config: AxiosRequestConfigExt): Promise<T> {let {url,queryData = {},isAuth = false,showLoading = false,method = 'GET',dataType = 'json',} = configif (showLoading) {//顯示加載框 //如果請求的響應時間小于200毫秒 則不顯示加載框//因為 timerid 是一個全局變量,所以每次請求都會覆蓋之前的定時器//如果請求都比較快的話,只有最后一次請求才會顯示加載框clearTimeout(timerId)timerId = setTimeout(() => {console.log('這里添加顯示加載框的代碼')}, 200)}if (isAuth) {let token = localStorage.getItem('token')if (!token) {//這里可以返回錯誤,也可以重定向到登錄頁面return Promise.reject('未登錄')}config.headers['token'] = token}if (method?.toUpperCase() === 'GET') {return this.axios.get(url, { params: queryData })}if (method?.toUpperCase() === 'POST') {if (dataType === 'json') {return this.axios.post(url, queryData, { headers: { 'Content-Type': 'application/json' } })} else if (dataType === 'formData') {let formData = new FormData()Object.keys(queryData).forEach((key) => {formData.append(key, queryData[key])})return this.axios.post(url, formData, {headers: { 'Content-Type': 'multipart/form-data' },})} else if (dataType === 'qs') {return this.axios.post(url, qs.stringify(queryData), {headers: { 'Content-Type': 'application/x-www-form-urlencoded' },})}}return Promise.reject('請求方式不正確')//后面如果有其他的請求方式,可以繼續擴展}
}export default new Http()

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/96396.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/96396.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/96396.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

2026新選題:基于K-Means實現學生求職意向聚類推薦職位

作者簡介&#xff1a;Java領域優質創作者、CSDN博客專家 、CSDN內容合伙人、掘金特邀作者、阿里云博客專家、51CTO特邀作者、多年架構師設計經驗、多年校企合作經驗&#xff0c;被多個學校常年聘為校外企業導師&#xff0c;指導學生畢業設計并參與學生畢業答辯指導&#xff0c;…

SpringCloud gateway配置predicates的匹配規則

需求 通過gateway的route規則&#xff0c;實現分組流量配置 資源 一個nacos&#xff0c;一個gateway &#xff0c;一個服務app&#xff08;部署雙實例group-1&#xff0c;group-2&#xff09;&#xff0c;實現特定條件下往分組一和分組二流量切換。 方案 1 配置文件 nacos…

android14 硬鍵盤ESC改BACK按鍵返回無效問題

在之前的android版本中修改外接鍵盤ESC為BACK按鍵做返回鍵使用&#xff0c;直接修改如下代碼即可&#xff1a;--- a/frameworks/base/data/keyboards/Generic.kcmb/frameworks/base/data/keyboards/Generic.kcm-499,7 499,7 key PLUS {### Non-printing keys ###key ESCAPE { …

【開題答辯全過程】以 asp高校外賣訂單系統的設計與實現為例,包含答辯的問題和答案

個人簡介一名14年經驗的資深畢設內行人&#xff0c;語言擅長Java、php、微信小程序、Python、Golang、安卓Android等開發項目包括大數據、深度學習、網站、小程序、安卓、算法。平常會做一些項目定制化開發、代碼講解、答辯教學、文檔編寫、也懂一些降重方面的技巧。感謝大家的…

UVa1063/LA3807 The Rotation Game

UVa1063/LA3807 The Rotation Game題目鏈接題意輸入格式輸出格式分析AC 代碼IDA*分3次BFS題目鏈接 本題是2004年icpc亞洲區域賽上海賽區的H題 題意 如下圖所示形狀的棋盤上分別有8個1、2、3&#xff0c;要往A&#xff5e;H方向旋轉棋盤&#xff0c;使中間8個方格數字相同。圖&…

用pywin32連接autocad 寫一個利用遺傳算法從選擇的閉合圖形內進行最優利用率的排版 ai草稿

好的&#xff0c;我們來深入細說遺傳算法&#xff08;Genetic Algorithm, GA&#xff09;在鈑金自動排版中的應用。遺傳算法 (GA) 在鈑金排版中的詳細解析遺傳算法是一種受達爾文生物進化論啟發的元啟發式優化算法。它不追求一次性找到數學上的絕對最優解&#xff0c;而是通過模…

Go語言io.Copy深度解析:高效數據復制的終極指南

在日常開發中&#xff0c;我們經常需要在不同的數據源之間復制數據。無論是文件操作、網絡傳輸還是進程通信&#xff0c;數據復制都是不可或缺的基礎操作。Go語言的標準庫提供了一個強大而高效的工具來簡化這一過程&#xff1a;io.Copy。 什么是io.Copy&#xff1f; io.Copy是G…

【Vue3】07-利用setup編寫vue(2)-setup的語法糖

其它篇章&#xff1a; 1.【Vue3】01-創建Vue3工程 2.【Vue3】02-Vue3工程目錄分析 3.【Vue3】03-編寫app組件——src 4.【Vue3】04-編寫vue實現一個簡單效果 5.【Vue3】05-Options API和Composition API的區別 6.【Vue3】06-利用setup編寫vue&#xff08;1&#xff09; 7.【Vue…

Firefox自定義備忘

1.設置firefox右鍵點擊標簽直接關閉&#xff0c;由于目前沒有插件能實現這個功能&#xff0c;只能手動設置了&#xff08;目前已知支持142和之前的版本&#xff09; firefox117右鍵關閉macWin 117版本應該可以了&#xff0c;大家可試下&#xff0c;配置方法參考之前的帖子&…

跨屏互聯KuapingCMS建站系統發布更新 增加數據看板

跨屏互聯KuapingCMS建站系統發布更新&#xff0c;增加了文章統計、產品統計、軟文統計、流量統計、pv統計、ip統計、os訪問者設備統計等等&#xff0c;整個體驗會更好&#xff0c;數據顯示更加直觀&#xff0c;可以清晰看到最近的網站數據&#xff0c;特別是對于老板&#xff0…

WebSocket連接狀態監控與自動重連實現

WebSocket連接狀態監控與自動重連實現 下面我將實現一個具有連接狀態監控和自動重連功能的WebSocket聊天室界面。 設計思路 創建直觀的連接狀態指示器實現自動重連機制&#xff0c;包括&#xff1a; 指數退避策略&#xff08;重連間隔逐漸增加&#xff09;最大重連次數限制手動…

【Vue2手錄05】響應式原理與雙向綁定 v-model

一、Vue2響應式原理&#xff08;底層基礎&#xff09; Vue2的“響應式”核心是數據變化自動觸發視圖更新&#xff0c;其實現依賴Object.defineProperty API&#xff0c;但受JavaScript語言機制限制&#xff0c;存在“數組/對象修改盲區”&#xff0c;這是理解后續內容的關鍵。 …

探索大語言模型(LLM):Ollama快速安裝部署及使用(含Linux環境下離線安裝)

前言 Ollama 是一個開源的本地化大模型運行平臺&#xff0c;支持用戶直接在個人計算機上部署、管理和交互大型語言模型&#xff08;LLMs&#xff09;&#xff0c;無需依賴云端服務。而且其混合推理的特性也使得CPU和GPU的算力能夠充分被使用&#xff0c;能夠在同等配置下跑更大…

滲透測試信息收集詳解

我們來詳細解析一下滲透測試中信息收集&#xff08;Information Gathering&#xff09;的完整內容、步驟及工具方法。信息收集是整個滲透測試的基石&#xff0c;其深度和廣度直接決定了后續測試的成功率&#xff0c;因此有“滲透測試成功與否&#xff0c;90%取決于信息收集”的…

Kafka面試精講 Day 16:生產者性能優化策略

【Kafka面試精講 Day 16】生產者性能優化策略 在“Kafka面試精講”系列的第16天&#xff0c;我們將聚焦于生產者性能優化策略。這是Kafka中極為關鍵的技術點&#xff0c;也是大廠面試中的高頻考點——尤其是在涉及高并發數據寫入、日志采集、實時數倉等場景時&#xff0c;面試…

深入解析AI溫度參數:控制文本生成的隨機性與創造性

引言 在人工智能飛速發展的今天&#xff0c;文本生成模型如GPT系列已經成為內容創作、代碼編寫、對話系統等領域的核心工具。然而&#xff0c;許多用戶在使用這些模型時&#xff0c;可能會發現輸出結果有時過于保守和重復&#xff0c;有時又過于天馬行空而缺乏連貫性。這背后其…

20250912在榮品RD-RK3588-MID開發板的Android13系統下在接電腦的時候禁止充電

20250912在榮品RD-RK3588-MID開發板的Android13系統下在接電腦的時候禁止充電 2025/9/12 10:21緣起&#xff1a;某人的電腦接榮品RD-RK3588-MID開發板的時候做APK開發板的時候&#xff0c;通過Android Studio連接榮品RD-RK3588-MID開發板。 經常斷聯/時斷時續。投訴了/抱怨了好…

Unity Addressable System 本地服務器功能驗證

1.從Package Manger里安裝Addressable 注意這里有Addressables和Addressables兩個包&#xff0c;前者是核心框架&#xff0c;處理跨平臺通用邏輯&#xff0c;比如用 地址&#xff08;Address&#xff09;來異步加載、卸載資源&#xff1b;自動做引用計數&#xff0c;避免資源泄…

碎片化采購是座金礦:數字化正重構電子元器件分銷的價值鏈

在電子元器件的分銷江湖里&#xff0c;長期存在著一條隱秘的“鄙視鏈”&#xff1a;訂單金額大、需求穩定的頭部客戶是眾星捧月的“香餑餑”&#xff0c;而需求碎片化、品類繁多的小微企業長尾訂單&#xff0c;則常被視作食之無味、棄之可惜的“雞肋”。行業固有認知告訴我們&a…

Typescript - 通俗易懂的 interface 接口,創建接口 / 基礎使用 / 可選屬性 / 只讀屬性 / 任意屬性(詳細教程)

前言 在面向對象語言中&#xff0c;接口是一個很重要的概念&#xff0c;它是對行為的抽象&#xff0c;而具體如何行動需要由類去實現。 TypeScript 中的接口是一個非常靈活的概念&#xff0c;除了可用于 對類的一部分行為進行抽象 以外&#xff0c;也常用于對「對象的形狀&…