使用 Vue + Axios 構建與后端交互的高效接口調用方案

使用 Vue + Axios 構建與后端交互的高效接口調用方案

在 Vue 前端開發中,與后端接口的數據交互是非常核心的部分。而 Axios 是 Vue 項目中最常用的 HTTP 客戶端,具備基于 Promise、攔截器、自定義實例等諸多優勢。

本篇將深入介紹如何基于 Vue 搭配 Axios 構建一個高效、可維護、可復用的接口調用方案,并通過實戰案例逐步拆解。


一、為什么選擇 Axios?

Axios 相較于原生 fetch 或其他庫的優勢:

  • 支持所有現代瀏覽器 + Node.js
  • 自動轉換 JSON 數據
  • 請求/響應攔截器
  • 支持請求取消
  • 支持上傳/下載進度監聽
  • 更友好的錯誤處理方式

二、項目中引入 Axios

在 Vue 3 + Vite 項目中安裝 Axios:

npm install axios

或使用 Yarn:

yarn add axios

三、創建 Axios 實例(推薦)

src/utils/request.js 中統一配置 Axios 實例:

// src/utils/request.js
import axios from 'axios'// 創建實例
const request = axios.create({baseURL: '/api', // 可根據環境變量動態設置timeout: 5000
})// 請求攔截器
request.interceptors.request.use(config => {// 在發送請求之前可添加 token、語言設置等const token = localStorage.getItem('token')if (token) {config.headers['Authorization'] = `Bearer ${token}`}return config},error => Promise.reject(error)
)// 響應攔截器
request.interceptors.response.use(response => {// 可根據后端接口結構統一處理if (response.data.code !== 0) {return Promise.reject(response.data.message)}return response.data.data},error => {// 錯誤統一處理console.error('網絡請求錯誤:', error)return Promise.reject(error)}
)export default request

四、封裝 API 模塊

將不同接口按模塊組織,增強可維護性。

// src/api/user.js
import request from '@/utils/request'export function login(data) {return request.post('/user/login', data)
}export function getUserInfo() {return request.get('/user/info')
}

五、組件中調用接口

<template><div><p v-if="user">你好,{{ user.name }}</p><button @click="fetchUser">獲取用戶信息</button></div>
</template><script setup>
import { ref } from 'vue'
import { getUserInfo } from '@/api/user'const user = ref(null)const fetchUser = async () => {try {user.value = await getUserInfo()} catch (err) {console.error('獲取失敗:', err)}
}
</script>

六、環境變量與動態 BaseURL 設置

.env.development.env.production 中配置:

VITE_API_BASE_URL=https://api.example.com

Axios 實例中動態引用:

const request = axios.create({baseURL: import.meta.env.VITE_API_BASE_URL,timeout: 5000
})

七、接口調用最佳實踐

實踐項建議做法
封裝 axios 實例集中管理請求配置
使用響應/請求攔截器統一處理 token、錯誤提示、請求 loading 等
模塊化接口函數每個功能模塊對應一個文件(如 user.js、post.js)
異常處理統一封裝可封裝 tryCatch()useRequest() Hook
接口參數校驗在請求前進行基本字段判斷
自動重試/請求取消可借助 axios-cancel-token、axios-retry 插件實現

八、封裝 useRequest Hook(高級優化)

封裝一個組合式 API 統一處理請求狀態:

// src/hooks/useRequest.js
import { ref } from 'vue'export function useRequest(apiFn) {const loading = ref(false)const error = ref(null)const data = ref(null)const run = async (...args) => {loading.value = trueerror.value = nulltry {data.value = await apiFn(...args)} catch (err) {error.value = err} finally {loading.value = false}}return { loading, error, data, run }
}

組件中使用:

<script setup>
import { useRequest } from '@/hooks/useRequest'
import { getUserInfo } from '@/api/user'const { data: user, loading, error, run: fetchUser } = useRequest(getUserInfo)fetchUser()
</script>

九、常見問題排查建議

  1. 跨域問題
    使用 Vite 開發服務器的代理功能:

    // vite.config.js
    server: {proxy: {'/api': {target: 'https://api.example.com',changeOrigin: true,rewrite: path => path.replace(/^\/api/, '')}}
    }
    
  2. 響應為 null 或 undefined
    檢查攔截器中是否錯誤地 return 了 response.data 而不是 response.data.data

  3. token 失效未重定向登錄
    可在響應攔截器中判斷狀態碼為 401 后跳轉:

    if (response.status === 401) {window.location.href = '/login'
    }
    

十、總結

通過 Axios 與 Vue 的組合使用,我們不僅能夠實現基礎的請求功能,還可以構建出統一化、模塊化、易維護的接口調用架構。更進一步地,你還可以結合 Pinia/Vuex 管理數據、搭配組合式函數封裝 Hook,打造屬于你團隊的最佳實踐規范。

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

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

相關文章

RN學習筆記 ?

太無聊了最近&#xff0c;找點事做&#xff0c;學一下RN豐富一下技術棧&#x1fae1;。但是開發APP除了RN&#xff0c;還有一種選擇就是WebView&#xff0c;但是基于WebView的APP的性能被普遍認為不如RN&#xff0c;因為WebView本質上是一個容器&#xff0c;用于在應用中嵌入網…

聊天助手提示詞調優案例

一、背景 今天有粉絲說自己的聊天助手提示詞輸出的效果不好&#xff0c;輸出的內容不是太呆板就是太浮夸&#xff0c;希望更像真人一樣。 本文介紹幾個調優方法&#xff0c;希望對大家有啟發。 二、調優 《系統掌握大語言模型提示詞 - 從理論到實踐》提示詞小冊中介紹了很多…

5.6 react組件化開發基礎

react 組件開發基礎 組件分類與組件使用 組件傳參 父傳子 【函數數據傳值 實參 形參對應關系】 子傳父 插槽 透傳 useContext 上下文&#xff08;作用域&#xff09; 跨層級調用方法 通過子組件的實例對象useRef 直接調用子組件的方法 和數據 狀態管理&#xff08;非常多…

【SF順豐】順豐開放平臺API對接(Java對接篇)

對接前置篇&#xff1a; 【SF順豐】順豐開放平臺API對接&#xff08;注冊、API測試篇&#xff09;_順豐api接口對接指南-CSDN博客 1.實現效果展示 2.SF順豐開放平臺&#xff0c;JDK資源下載。 下載地址&#xff1a;順豐開放平臺 3.將下載的JDK放入項目中。 4.將JDK資源引入p…

我用cursor 搭建了臨時郵箱服務-Temp Mail 365

用業余時間搭建了一個臨時郵箱&#xff0c;對于后端程序員出身的我&#xff0c;對前端了解的不太多&#xff0c;有了cursor的幫助&#xff0c;補齊了自己的短板&#xff0c;搭建了這個服務&#xff0c;下面對臨時郵箱架構設計與安全性做一個分析。 https://temp-mail-365.com 臨…

破解工業3D可視化困局,HOOPS Visualize助力高效跨平臺協作與交互!

一、當前3D可視化面臨的痛點 &#xff08;1&#xff09;性能瓶頸 現有的許多3D可視化工具在處理大型復雜模型時往往力不從心。例如在航空航天、汽車制造等高端制造業&#xff0c;動輒涉及數以億計的三角面片和海量的紋理細節。這些超大規模的模型在渲染時常常出現卡頓、延遲&…

1、Kafka與消息隊列核心原理詳解

消息隊列&#xff08;Message Queue, MQ&#xff09;作為現代分布式系統的基礎組件&#xff0c;極大提升了系統的解耦、異步處理和削峰能力。本文以Kafka為例&#xff0c;系統梳理消息隊列的核心原理、架構細節及實際應用。 Kafka 基礎架構及術語關系圖 術語簡要說明 Produce…

2025年北京市職工職業技能大賽第六屆信息通信行業網絡安全技能大賽初賽-wp

- -考試當場沒做出來 后面做的 misc ? cd misc ? ls num.docx num.zip ? unzip num.docx Archive: num.docxinflating: [Content_Types].xmlinflating: _rels/.relsinflating: word/document.xmlinflating: word/_rels/document.xml.relsextracting: word/media/image1.jp…

JavaScript 到命令和控制 (C2) 服務器惡意軟件分析及防御

攻擊始于一個經過混淆的JavaScript文件,該文件從開源服務中獲取編碼字符串以執行PowerShell腳本。然后,該腳本從一個IP地址和一個URL縮短器下載一個JPG圖像和一個文本文件,這兩個文件都包含使用隱寫術嵌入的惡意MZ DOS可執行文件。這些有效載荷一旦執行,就會部署Stealer惡意…

【計網】ipconfig、ping、arp、tracert

目錄 ipconfig ping arp tracert cmd ipconfig ipcofig -all IPv4 物理地址 ping 檢測網絡連通情況&#xff0c;分析網絡速度 根據域名得到服務器IP 根據TTL判斷對方所使用的操作系統以及數據包經過路由器數量 byte數據包大小 time響應時間 TTLDNS記錄在DNS服務器上存在…

WiFi那些事兒(八)——802.11n

目錄 802.11n 技術簡介與測試項 一、802.11n 技術簡介 &#xff08;一&#xff09;標準概述 &#xff08;二&#xff09;關鍵技術特性 1. MIMO&#xff08;多輸入多輸出&#xff09;技術 2. 信道綁定&#xff08;Channel Bonding&#xff09; 3. 幀聚合&#xff08;Fram…

碼蹄集——直角坐標到極坐標的轉換、射線、線段

目錄 MT1052 直角坐標到極坐標的轉換 MT1066 射線 MT1067 線段 MT1052 直角坐標到極坐標的轉換 思路&#xff1a; arctan()在c中是atan()&#xff0c;結果是弧度要轉換為度&#xff0c;即乘與180/PI 拓展&#xff1a;cos()、sin()在c代碼中表示方式不變 #include<bits/…

深入解析 Linux/Unix 通信機制:從原理到觀測實踐

深入解析 Linux/Unix 通信機制&#xff1a;從原理到觀測實踐 配圖建議&#xff1a;Linux系統架構與通信機制全景示意圖 一、開篇&#xff1a;理解“一切皆文件”的哲學 Unix/Linux 操作系統的核心靈魂在于其獨特的設計哲學。當 Dennis Ritchie 和 Ken Thompson 在貝爾實驗室開…

spring上傳文件添加水印

1、實現 MultipartFile package com.pojo.common.core.domain;import java.io.ByteArrayInputStream; import java.io.File; import java.io.IOException; import java.io.InputStream;import org.springframework.lang.Nullable; import org.springframework.util.Assert; im…

嵌入式MCU語音識別算法及實現方案

在嵌入式MCU&#xff08;微控制器單元&#xff09;中實現語音識別&#xff0c;由于資源限制&#xff08;如處理能力、內存、功耗等&#xff09;&#xff0c;通常需要輕量級算法和優化技術。以下是常見的語音識別算法及實現方案&#xff1a; 一、傳統語音識別算法 動態時間規整&…

【論文閱讀】DETR+Deformable DETR

可變形注意力是目前transformer結構中經常使用的一種注意力機制&#xff0c;最近補了一下這類注意力的論文&#xff0c;提出可變形注意力的論文叫Deformable DETR&#xff0c;是在DETR的基礎上進行的改進&#xff0c;所以順帶著把原本的DETR也看了一下。 一、DETR DETR本身是…

大模型在宮頸癌診療全流程預測與應用研究報告

目錄 一、引言 1.1 研究背景與意義 1.2 研究目的與創新點 二、大模型預測宮頸癌術前風險 2.1 術前數據收集與預處理 2.2 預測模型構建與算法選擇 2.3 術前風險預測指標與案例分析 三、大模型輔助制定術中方案 3.1 術中風險動態監測與預測 3.2 基于預測的手術方案優化…

【Python 文件I/O】

Python 的文件 I/O 操作是數據處理的基礎技能&#xff0c;涉及文件的讀寫、路徑管理、異常處理等核心功能。以下是文件 I/O 的核心知識點&#xff1a; 一、基礎文件操作 1. 打開文件 # 通用模式&#xff1a;r(讀)/w(寫)/a(追加) b(二進制)/t(文本&#xff0c;默認) f open(…

Twin Builder 中的電池等效電路模型仿真

電池單元熱設計挑戰 電池熱管理的主要挑戰之一是確保溫度低于最大工作限值。較高的溫度會導致效率降低、加速老化和潛在的安全隱患。工程師必須了解電池產生的熱量&#xff0c;才能充分設計冷卻系統。 了解和預測電池模塊的熱行為需要將電池的熱損耗與電池單元的電氣機械特性…

一種基于條件生成對抗網絡(cGAN)的CT重建算法

簡介 簡介:該文提出了一種基于條件生成對抗網絡(cGAN)的CT重建算法,通過引入CBAM注意力機制增強網絡對關鍵特征的提取能力,有效解決了CT成像中因噪聲干擾導致的重建精度下降問題。實驗采用固體火箭發動機模擬件數據集,將正弦圖分為五組并添加不同程度的噪聲進行訓練。結…