掌握axios與Vue 3:構建高效HTTP請求的終極指南

引言

axios作為一個廣泛使用的JavaScript庫,因其簡潔的API、強大的功能和良好的瀏覽器兼容性,成為了許多前端開發者在Vue 3項目中的首選。

?axios簡介

axios是什么?

axios是一個基于Promise的HTTP客戶端,用于瀏覽器和node.js環境中。它允許開發者以一種簡潔的方式發送異步HTTP請求到REST endpoints,并處理響應。axios支持請求和響應攔截器、自動轉換JSON數據、客戶端支持防御XSRF等特性。

axios的主要特點和優勢
  • 基于Promise:axios使用Promise,這是現代JavaScript中處理異步操作的標準方式。
  • 瀏覽器和Node.js兼容:axios可以在前端和后端環境中使用,方便前后端代碼共享。
  • 請求和響應攔截器:可以添加攔截器來處理請求或響應,例如添加認證令牌、日志記錄等。
  • 自動轉換JSON數據:axios會自動將JSON字符串轉換為JavaScript對象,反之亦然。
  • 支持請求取消:可以取消正在進行的請求。
  • 支持請求和響應的配置:可以對請求和響應進行詳細的配置,如超時設置、自定義HTTP頭等。
axios的基本使用方法(GET、POST請求示例)

GET請求示例

// 使用axios發送GET請求
axios.get('https://api.example.com/data').then(function (response) {// 處理成功情況console.log(response.data);}).catch(function (error) {// 處理錯誤情況console.error(error);});

POST請求示例

// 使用axios發送POST請求
axios.post('https://api.example.com/data', {firstName: 'Fred',lastName: 'Flintstone'}).then(function (response) {// 處理成功情況console.log(response.data);}).catch(function (error) {// 處理錯誤情況console.error(error);});

在這些示例中,我們使用了axios的.get().post()方法來發送GET和POST請求。每個方法都返回一個Promise對象,該對象在請求成功時解決,并在請求失敗時拒絕。通過.then().catch()方法,我們可以處理成功的響應和錯誤情況。

這些基本的使用方法是axios的核心,通過它們,開發者可以輕松地在Vue 3應用中實現與后端服務的交互。

安裝和配置axios

1.使用npm安裝axios:

npm install axios

2.或者使用yarn安裝axios:

yarn add axios

3.同樣可以通過pnpm來安裝axios。但是我們首先確保項目中已經安裝了pnpm。如果還沒有安裝,可以通過npm或yarn來安裝pnpm:

npm install -g pnpm

或者

yarn global add pnpm

安裝完成后,你可以使用pnpm來安裝axios:

pnpm add axios

實戰階段

我們可以將封裝好的HTTP請求模塊命名為request.js,并使用request作為導入的別名。以下是創建一個名為request.js的封裝好的HTTP請求模塊的示例:

// request.js
import axios from 'axios';// 創建axios實例
const service = axios.create({baseURL: process.env.VUE_APP_BASE_API, // API的基礎URLtimeout: 5000 // 請求超時時間
});// 請求攔截器
service.interceptors.request.use(config => {// 在這里可以添加一些請求前的操作,例如添加tokenreturn config;},error => {// 請求錯誤處理console.error('Request Error:', error);return Promise.reject(error);}
);// 響應攔截器
service.interceptors.response.use(response => {// 對響應數據做點什么return response.data;},error => {// 響應錯誤處理console.error('Response Error:', error);return Promise.reject(error);}
);export default service;

然后,在你的Vue 3組件中,你可以通過導入上面創建的request.js模塊來發送HTTP請求:

// MyComponent.vue
<script setup>
import { ref } from 'vue';
import request from './request'; // 假設request.js位于同一目錄下const fetchData = async () => {try {const response = await request.get('/some-endpoint');// 處理響應數據console.log(response);} catch (error) {// 處理錯誤console.error('Error fetching data:', error);}
};// 調用fetchData以獲取數據
fetchData();
</script>

在這個示例中,我們使用request作為導入的別名,這樣在調用請求方法時,代碼更加簡潔明了。通過這種方式,你可以輕松地在多個組件中重用HTTP請求邏輯,同時保持代碼的清晰和組織性。此外,你還可以根據需要進一步封裝更多的請求方法(如POST、PUT、DELETE等),以及添加更多的配置和錯誤處理邏輯。

請求和響應攔截器的高級配置(以pinia為例子)

在Pinia中獲取token

首先,確保您已經在Pinia中定義了相應的store,并且該store中包含了token。例如:

// stores/auth.js
import { defineStore } from 'pinia';export const useAuthStore = defineStore('auth', {state: () => ({token: null,}),actions: {setToken(newToken) {this.token = newToken;localStorage.setItem('token', newToken);},removeToken() {this.token = null;localStorage.removeItem('token');},},
});

然后,在請求攔截器中,您可以從Pinia的store中獲取token并添加到請求頭中:

// request.js
import axios from 'axios';
import { useAuthStore } from '../stores/auth'; // 假設您的Pinia store文件位于此路徑const service = axios.create({baseURL: process.env.VUE_APP_BASE_API,timeout: 5000,
});service.interceptors.request.use(config => {const authStore = useAuthStore();const token = authStore.token;if (token) {config.headers['Authorization'] = `Bearer ${token}`;}return config;},error => {console.error('Request Error:', error);return Promise.reject(error);}
);export default service;

在響應攔截器中進行數據轉換、錯誤重試等操作

響應攔截器可以用來處理服務器返回的數據,例如轉換數據格式或處理特定的錯誤。以下是如何在響應攔截器中進行數據轉換和錯誤重試的示例:

// request.js
// ...之前的代碼service.interceptors.response.use(response => {// 假設服務器返回的數據格式為JSON,且包含data字段const data = response.data;// 可以根據需要對數據進行轉換或處理return data;},error => {// 響應錯誤處理// 例如,如果響應狀態碼為401(未授權),則可能需要重新登錄if (error.response && error.response.status === 401) {// 重定向到登錄頁面router.push('/login');}// 如果響應狀態碼為429(請求過多),則可以進行錯誤重試if (error.response && error.response.status === 429) {// 重試邏輯console.log('Request was rate limited, retrying...');// 可以在這里實現重試邏輯,例如使用遞歸調用或使用第三方庫}return Promise.reject(error);//這行代碼的意思是返回一個被拒絕的Promise對象,并將error作為拒絕的原因}
);export default service;

資料推薦

1.axios官方文檔:Axios中文文檔 | Axios中文網

2.Vue.js官方文檔:https://cn.vuejs.org/

3.Pinia官方文檔:Pinia | The intuitive store for Vue.js

總結

axios是一個功能強大的HTTP客戶端庫,它使用Promise來處理異步請求,非常適合在Vue 3項目中使用

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

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

相關文章

【視頻】R語言廣義加性模型GAMs非線性效應、比較分析草種耐寒性實驗數據可視化

全文鏈接&#xff1a;https://tecdat.cn/?p36979 原文出處&#xff1a;拓端數據部落公眾號 廣義加法模型&#xff08;Generalized Additive Models, GAMs&#xff09;作為一種高度靈活的統計工具&#xff0c;顯著擴展了廣義線性模型&#xff08;Generalized Linear Models, …

我被手機所傷,竟如此憔悴。

臨睡前&#xff0c;剛刷完小視頻&#xff0c;感覺好無聊。一陣陣空虛感襲來。看看時間&#xff0c;哦&#xff0c;原來我下班后一直從6點刷視頻到11點。 哎&#xff0c;太空虛了&#xff0c;又馬上要睡覺了&#xff0c;為什么會這么難受呢?明明我大學&#xff0c;高中&#x…

代碼隨想錄算法訓練營第9天

151.反轉字符串中的單詞 題目鏈接&#xff1a;151. 反轉字符串中的單詞 - 力扣&#xff08;LeetCode&#xff09; 視頻鏈接&#xff1a;代碼隨想錄 (programmercarl.com) 第一想法 使用split函數然后倒序相加 代碼隨想錄想法 先去除空格&#xff0c;再將整個字符串反轉&…

Android11 應用啟動流程

應用層調用startActivity&#xff0c;會跨進程調用導致ATMS的startActivityAsUser方法被調用 //frameworks/base/services/core/java/com/android/server/wm/ActivityTaskManagerService.java private int startActivityAsUser(IApplicationThread caller, String callingPack…

數字信號處理及MATLAB仿真(4)——量化的其他概念

上回書說到AD轉換的兩個步驟——量化與采樣兩個步驟。現在更加深入的去了解以下對應的概念。學無止境&#xff0c;要不斷地努力才有好的收獲。萬丈高樓平地起&#xff0c;唯有打好基礎&#xff0c;才能踏實前行。 不說了&#xff0c;今天咱們繼續說說這兩個步驟&#xff0c;首先…

每日刷題(二分圖,二分查找,dfs搜索)

目錄 1.P3853 [TJOI2007] 路標設置 2.P1129 [ZJOI2007] 矩陣游戲 3.P1330 封鎖陽光大學 4.Trees 5.P1141 01迷宮 1.P3853 [TJOI2007] 路標設置 P3853 [TJOI2007] 路標設置 - 洛谷 | 計算機科學教育新生態 (luogu.com.cn) 先求出每個路標之間的距離&#xff0c;再二分查找每…

新媒體運營都需要掌握哪些技術?沈陽新媒體運營免費培訓

新媒體運營需要掌握的技術包括內容創作、FAB產品介紹法、用戶運營、社群運營、活動策劃和數據分析。這個崗位在現代社會中的重要性日益突出&#xff0c;隨著互聯網的發展&#xff0c;新媒體已成為人們獲取信息的主要渠道之一&#xff0c;而新媒體運營則是通過各種新媒體平臺進行…

數據庫系統原理練習 | 作業2-第2章關系數據庫(附答案)

整理自博主本科《數據庫系統原理》專業課完成的課后作業&#xff0c;以便各位學習數據庫系統概論的小伙伴們參考、學習。 *文中若存在書寫不合理的地方&#xff0c;歡迎各位斧正。 專業課本&#xff1a; 目錄 一、選擇題 二、填空題 三、簡答題 四、關系代數 1.課本p70頁&…

hive中reverse函數

目錄 前言基本函數介紹實戰 前言 reverse函數&#xff0c;是一個常用的字符串處理函數&#xff0c;很多編程語言都有。最近開發中&#xff0c;遇到一個reverse解決的需求&#xff0c;發現自己尚未總結過&#xff0c;遂補上。 基本函數介紹 SELECT reverse(string_column) FR…

虛擬機安裝Linux CENTOS 07 部署NET8 踩坑大全

首先下載centos07鏡像&#xff0c;建議使用阿里云推薦的地址&#xff1a; https://mirrors.aliyun.com/centos/7.9.2009/isos/x86_64/?spma2c6h.25603864.0.0.59b5f5ad5Nfr0X 其實這里就已經出現第一個坑了 centos 07 /usr/lib64/ 的 libstdc.so只支持到19&#xff1b; GLI…

數據湖表格式 Hudi/Iceberg/DeltaLake/Paimon TPCDS 性能對比(Spark 引擎)

當前&#xff0c;業界流行的集中數據湖表格式 Hudi/Iceberg/DeltaLake&#xff0c;和最近出現并且在國內比較火的 Paimon。我們現在看到的很多是針對流處理場景的讀寫性能測試&#xff0c;那么本篇文章我們將回歸到大數據最基礎的場景&#xff0c;對海量數據的批處理查詢。本文…

Java中的線程同步機制有哪些?

Java中的線程同步機制是一套用于協調線程間的數據訪問及活動的機制&#xff0c;該機制用于保障線程安全以及實現這些線程的共同目標。Java平臺提供的線程同步機制主要包括以下幾個方面&#xff1a; 1. 鎖&#xff08;Lock&#xff09; 鎖是Java中最基本的線程同步機制之一&am…

飛書、釘釘、企業微信的大模型“三國殺”

文&#xff1a;互聯網江湖 作者&#xff1a;劉致呈 曾經在一次內部的周年會上&#xff0c;字節跳動CEO梁汝波曾表示對飛書和火山引擎的研發投入不低于抖音和TikTok。言下之意&#xff0c;飛書在字節內部的重要性比肩抖音。 業務的重要性從時間上也看得出來&#xff0c;要知道…

靜態時序分析:Leaf Cell(葉單元)

相關閱讀???????靜態時序分析https://blog.csdn.net/weixin_45791458/category_12567571.html 在DC中&#xff0c;leaf cell&#xff08;葉單元&#xff09;有時會出現在描述中&#xff0c;例如set_input_delay的-reference_pin選項的參數&#xff0c;就必須是一個端口或…

C# Winform之propertyGrid控件使用詳解和分組設置

PropertyGrid 控件在 WinForms 中是一個非常有用的工具&#xff0c;它允許用戶查看和編輯一個對象的屬性。這個控件非常適合用于配置對話框或任何需要動態顯示對象屬性的地方。下面我會詳細介紹 PropertyGrid 的使用方法和如何對屬性進行分組。 使用詳解 1. 添加 PropertyGri…

《昇思25天學習打卡營第18天|onereal》

RNN實現情感分類 概述 情感分類是自然語言處理中的經典任務&#xff0c;是典型的分類問題。本節使用MindSpore實現一個基于RNN網絡的情感分類模型&#xff0c;實現如下的效果&#xff1a; 輸入: This film is terrible 正確標簽: Negative 預測標簽: Negative輸入: This film…

AI版Siri要明年見,研究表明ChatGPT暫無法取代程序員,Kimi推出瀏覽器插件

ChatGPT狂飆160天&#xff0c;世界已經不是之前的樣子。 更多資源歡迎關注 根據彭博社記者馬克古爾曼的最新消息&#xff0c;蘋果公司今年不會推出全新的Apple Intelligence驅動的Siri&#xff0c;該公司計劃在明年1月開始測試&#xff0c;并在iOS 18.4中才推出正式版本。 此前…

景聯文科技以高質量多模態數據集賦能AI大模型,精準匹配提升模型性能

在人工智能的浪潮中&#xff0c;語料數據如同建筑的基石&#xff0c;其質量、規模和運用策略直接決定了AI模型的表現和應用的廣泛性。 景聯文科技在AI領域深耕多年&#xff0c;打磨了高質量多模態數據集&#xff0c;致力于為不同訓練階段的算法精準匹配高質量數據資源。 3000萬…

STM32中斷(NVIC和EXIT)

CM3 內核支持 256 個中斷&#xff0c;其中包含了 16 個內核中斷和 240個外部中斷&#xff0c;并且具有 256 級的可編程中斷設置。但STM32 并沒有使用CM3內核的全部東西&#xff0c;而是只用了它的一部分。STM32有 76 個中斷&#xff0c;包括16 個內核中斷和 60 個可屏蔽中斷&am…

Dify中的RAG和知識庫

一.RAG 基本架構 當用戶提問 “美國總統是誰&#xff1f;” 時&#xff0c;系統并不是將問題直接交給大模型來回答&#xff0c;而是先將用戶問題在知識庫中進行向量搜索&#xff0c;通過語義相似度匹配的方式查詢到相關的內容&#xff08;拜登是美國現任第46屆總統…&#xff0…