axios的使用以及封裝

前言:

????????在現代前端開發中,網絡請求是不可避免的核心功能之一。無論是獲取后端數據、提交表單信息,還是與第三方 API 交互,高效且可靠的 HTTP 請求庫至關重要。axios 作為一款基于 Promise 的 HTTP 客戶端,憑借其簡潔的 API 設計、強大的攔截器機制以及廣泛的瀏覽器和 Node.js 兼容性,成為開發者首選的工具之一。

????????axios 不僅提供了基礎的 GET、POST 等請求方法,還支持請求和響應的攔截、取消請求、自動轉換 JSON 數據等特性,極大簡化了開發流程。然而,在實際項目中直接使用原生 axios 可能會導致代碼冗余、維護困難等問題。通過合理的封裝,可以統一處理錯誤、設置全局配置、管理請求與響應邏輯,從而提升代碼的可讀性和可維護性。

????????本文將詳細介紹 axios 的基本使用方法,并探討如何基于實際業務需求進行二次封裝,使其更符合項目規范,同時兼顧靈活性和擴展性。無論是初學者還是有一定經驗的開發者,都能從中獲得實用的技巧和最佳實踐。

1.axios請求接口

1.下載

npm install axios -S

2.引入

import axios from 'axios';

3.使用

? ? ? ? axios有兩種使用方式,如下:

1.axios.'請求方式'
比如:axios.get()  axios.post2.axios({url:'請求url',method:'請求方式,不給默認get請求',data:'post傳值方式',params:'get傳值方式'
}).then(res => {console.log( res ); // 后端給前端的數據
})

? ? ? ? 比如我在優啟夢API上找的免費API接口寫的例子,如下:

<template><div class="app">{{ data }}</div>
</template><script setup>
import axios from 'axios';
import { onMounted, ref } from 'vue';const data = ref('')onMounted(() => {axios({url:'https://api.uomg.com/api/rand.qinghua?format=json',method:'get'}).then(res=>{data.value = res.data.content})
})
</script>

2.axios的二次封裝

????????axios的二次封裝解決了什么問題:

????????1.請求的url統一管理。

????????2.配置統一的請求頭。

? ? ? ? 說白了axios的二次封裝是為了方便管理和維護,首先我們需要在src目錄下去創建一個工具文件夾(utils),在該文件夾下去創建一個js文件用來封裝axios,命名為resquest.js。

? ? ? ? 創建好之后,第一步就是要引入axios。第二步需要創建axios對象,用來管理統一的url路徑。第三步需要設置請求攔截器,它可以在請求成功前去完成一些操作,比如添加請求頭、設置loading動畫等等。第四步是設置響應攔截器,它是請求完成了,后端返回給前端的數據,可以去處理http狀態碼等等。最后將我們創建的axios對象導出即可。基本代碼如下:

// 1.引入axios
import axios from "axios";// 2.創建axios對象
const service = axios.create({baseURL: 'https://api.uomg.com'
});// 3.設置請求攔截器 請求前進行一些操作 比如添加請求頭、設置loading動畫等
service.interceptors.request.use(config => {return config;
}, err => {Promise.reject(error)
})// 4.設置響應攔截器 后端給前端返回數據 可以處理http狀態碼
service.interceptors.response.use((response) => {if (response.status === 200) {return response.data}},err => {return Promise.reject(new Error(err.response.data))}
)export default service

? ? ? ? 封裝好之后,我們就可以對請求代碼進行修改,代碼如下:

<template><div class="app">{{ data }}</div>
</template><script setup>
import { onMounted, ref } from 'vue';
import request from './utils/request';const data = ref('')onMounted(() => {request({// 只需要添加參數url: '/api/rand.qinghua?format=json',}).then(res => {data.value = res.content})
})
</script>

3.解偶

? ? ? ? 當項目中可能一個請求會在多個地方用到是,就需要統一管理。

? ? ? ? 在utils文件夾下新建api文件夾的目的在于將接口請求與業務邏輯徹底解耦,實現接口的集中管理和復用。這種架構設計主要解決以下問題:

  1. 接口復用性:避免同一接口在不同組件重復定義
  2. 維護便捷性:接口路徑或參數變更時只需修改單個文件
  3. 語義化調用:通過命名清晰的函數替代原始URL字符串
  4. 類型提示支持:配合TypeScript可獲得更好的代碼提示
import request from '../request';export function getQingHua(){return request({url: '/api/rand.qinghua?format=json',})
}

? ? ? ? 修改原組件代碼為:

<template><div class="app">{{ data }}</div>
</template><script setup>
import { onMounted, ref } from 'vue';
import { getQingHua } from './utils/api/course';const data = ref('')onMounted(() => {getQingHua().then(res => {data.value = res.data})
})
</script>

這種架構設計使項目具備以下優勢:

  • 接口與業務邏輯完全分離
  • 團隊成員協作更規范
  • 接口變更影響范圍可控
  • 代碼可測試性增強
  • 類型系統更完善

結語:

????????axios 作為現代前端開發的核心工具,其靈活性和強大功能為 HTTP 請求處理提供了高效解決方案。通過原生使用和二次封裝,開發者能夠根據項目需求實現從基礎到進階的請求管理。封裝后的代碼不僅提升了可維護性,還通過統一配置和攔截機制增強了健壯性。接口解耦進一步優化了項目結構,使團隊協作更加規范。掌握這些技巧將顯著提升開發效率和代碼質量,為復雜應用奠定堅實基礎。

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

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

相關文章

github上部署自己的靜態項目

前置知識1、要在github部署項目要提交打包后的靜態文件(html,css&#xff0c;js)到倉庫里2、我們看下github所提供給我們的部署方式有啥&#xff0c;如下所見&#xff1b;要么是/root文件夾&#xff08;就說倉庫里全是打包后的產物&#xff1a;html,css&#xff0c;js要全部放到…

能源管理綜合平臺——分布式能源項目一站式監控

綜合性的能源企業管理面臨著項目多、分布散、信息孤島等問題&#xff0c;分布式的多項目能源在線監控管理平臺是一種集成了多個能源項目的數據采集、監控、分析和管理的系統。平臺集成GIS能力&#xff0c;能夠展示項目的整體分布態勢&#xff0c;對不同地點、不同類型的能源項目…

修改阿里云vps為自定義用戶登錄

win系統上找到控制面板-->用戶賬戶-->更改賬戶類型點擊更改賬戶類型&#xff0c;此時我們看到vps的默認管理員賬戶Administrator。為了防止vps被別人使用默認賬戶Administrator攻擊&#xff0c;我們添加一個用戶賬戶&#xff0c;點擊添加用戶賬戶。 用戶名建議奇葩點&…

Linux: perf: debug問題一例,cpu使用率上升大約2%;多線程如何細化cpu及perf數據分析

文章目錄 前提面臨的問題內核級別函數的差別繼續debug總結根據pid前提 一個進程安置在一個CPU上,新功能上線之后,固定量的業務打起來,占用的CPU是42%。之前沒有新功能的情況下,CPU占用是40%。差了大約2%。而且這個進程里的線程數非常多,有50多個線程。從差距看變化不大,…

計算階梯電費

實現一個 Python 程序&#xff0c;根據使用的電量&#xff08;從控制臺中讓用戶輸入&#xff09;計算需要交的電費&#xff0c;電量分為兩個階梯&#xff0c;小于 200 度和大于 200 度&#xff0c;如果電量小于等于 200 度&#xff0c;電價就是 0.5 元/度&#xff0c;如果電量大…

替代MT6701,3D 霍爾磁性角度傳感器芯片

KTH5502 是一款基于垂直霍爾技術的高精度絕對角度傳感器芯片&#xff0c;支持全角度&#xff08;0–360&#xff09;測量。 芯片內部集成 X、Y 軸的垂直霍爾元件和 Z 軸的水平霍爾元件&#xff0c;能夠同時感知磁場在 X、Y、Z 三個 方向的變化。得益于垂直霍爾技術優異的正交匹…

華為 Mate 80 影像配置揭秘:硬軟雙升

7 月 7 日&#xff0c;知名數碼博主爆料了華為 Mate 80 系列的影像配置&#xff0c;引發廣泛關注。從曝光信息來看&#xff0c;Mate 80 系列在影像方面延續華為的技術探索&#xff0c;通過硬件升級與算法優化&#xff0c;力圖為用戶帶來更出色的拍攝體驗。? 爆料顯示&#xff…

Android studio升級AGP需要注意哪些

deep seek回答&#xff1a; 深度思考完成 用時26秒 嗯&#xff0c;用戶詢問的是在Android Studio中升級AGP需要注意哪些事項。這個問題很實用&#xff0c;因為AGP升級確實是個容易踩坑的過程。讓我看看搜索結果里有什么關鍵信息。 首先注意到搜索結果里有幾個高可信度的資料專…

MapReduce數據處理過程2萬字保姆級教程

目錄 1. MapReduce 的核心思想:分而治之的藝術 2. Hadoop MapReduce 的架構:從宏觀到微觀 3. WordCount 實例:從代碼到執行的完整旅程 4. 源碼剖析:Job.submit 的魔法 5. Map 任務的執行:從分片到鍵值對 6. Shuffle 階段:MapReduce 的幕后英雄 7. Reduce 任務的執行…

Rust單例模式:OnceLock的使用指南

想象一下你在構建一個需要全局數據庫連接的Rust應用。傳統語言里&#xff0c;單例模式常常伴隨著鎖的沉重和初始化競態的焦慮。但在Rust的世界里&#xff0c;OnceLock就像個輕巧的守門人&#xff0c;只允許一次安全的通行。 簡潔的OnceLock實現 看看這段代碼如何優雅地解決單…

JavaScript性能優化實戰:表格控件高效開發指南

引言 在現代Web應用開發中&#xff0c;電子表格功能已成為數據分析、報表展示等場景的核心需求。SpreadJS作為一款高性能的純前端電子表格控件&#xff0c;能夠完美兼容Excel文件格式&#xff0c;支持百萬級數據量和復雜公式計算。然而隨著數據規模的增長和業務邏輯的復雜化&a…

RWA(現實世界資產)代幣化系統構建指南:合規、跨境與機構級解決方案

——金融科技公司機構市場拓展戰略報告前言&#xff1a;RWA代幣化的機構化浪潮與市場機遇 截至2025年6月&#xff0c;全球RWA&#xff08;Real World Assets&#xff09;鏈上規模突破240億美元&#xff0c;3年增長超380%&#xff0c;成為僅次于穩定幣的增速第二賽道。貝萊德、摩…

QML Label組件

QML中的Label組件是構建用戶界面時最常用的文本顯示控件之一&#xff0c;它繼承自Text元素但提供了更豐富的UI特性和主題集成支持。本文將全面介紹Label的核心功能、屬性配置、使用技巧以及與Text組件的區別&#xff0c;幫助開發者高效構建美觀的文本界面。 Label組件基礎 La…

使用 GDB 調試 Redis 服務進程指南

1. 準備工作 安裝 GDB 在大多數 Linux 發行版上&#xff0c;執行&#xff1a; sudo apt-get update sudo apt-get install gdb確保有足夠磁盤空間 Core dump 文件可能較大&#xff0c;請提前檢查磁盤剩余空間&#xff1a; df -h .可選&#xff1a;使用 tmux 或 screen 為避免 S…

深度學習-環境準備

安裝python&#xff0c;miniconda(最后步驟關于python環境變量部分全部勾選)&#xff0c;pycharm 關于離線安裝numpy和matplotlib&#xff08;我的環境連不上網&#xff09; 我們先去 PyPI The Python Package Index 下載離線包 在搜索框搜索你的包名稱&#xff0c;這里是 m…

記錄在Windows系統用Python 3.12環境實現Nuitka過程

內容只提供Windows 10 與 Windows 11 下&#xff0c;搭建 Python 3.12 環境&#xff0c;并使用 Nuitka 將腳本打包為可執行文件的詳細流程。全文分為以下幾部分&#xff1a; 準備工作與系統要求 安裝 Python 3.12 配置環境變量與 pip 創建虛擬環境&#xff08;推薦&#xff…

深入解析C#接口聲明:核心規則與最佳實踐

接口聲明的核心約束 禁止包含的成員類型 ? 數據成員&#xff08;字段、常量&#xff09;? 靜態成員&#xff08;靜態方法/屬性&#xff09; 理由&#xff1a;接口僅定義契約&#xff0c;不涉及實現或狀態存儲。 允許的成員類型&#xff08;僅非靜態函數成員&#xff09; ? 方…

Javaweb - 10.6 請求轉發和響應重定向

目錄 概述 請求轉發 邏輯圖 測試代碼 總結 響應重定向 邏輯圖 測試代碼 總結 完&#xff01; 概述 什么是請求轉發和響應重定向&#xff1f; 請求轉發和響應重定向&#xff0c;是 web 應用中&#xff0c;間接訪問項目資源的兩種手段&#xff0c;也是 Servlet 控制頁…

severb

題目一 解決方法&#xff1a; 題目二&#xff1a; 解決方法&#xff1a; 題目三&#xff1a; xfs&#xff1a; ext&#xff1a; 題目四&#xff1a; 解決方法&#xff1a; fdisk中命令&#xff1a;n&#xff08;新建&#xff09; 主分區 、id、起始塊都為默認、結束塊為756M t…

Hbase2.6.2集群部署(最新版)

配套版本安裝&#xff1a; Hadoop 3.4.1 Zookeeper3.9.3 Hbase2.6.2 前置安裝 Linux環境下部署Zookeeper3.9.3(最新版)集群部署-CSDN博客 Linux環境下Hadoop3.4.1(最新版本)集群部署-CSDN博客 一、文件解壓 cd /usr/local/soft/ tar -zxvf hbase-2.6.2-bin.tar.gz 二、修改啟…