網絡通信---Axios

1、什么是 Axios?

????????Axios? 是一個基于 ?Promise? 的 ?HTTP 客戶端,用于瀏覽器和 Node.js 環境,用來發送 ?HTTP 請求(如 GET、POST、PUT、DELETE 等)?。

? ? ? ??它常用于:

  • 向后臺 API 發送請求獲取數據
  • 提交表單數據
  • 上傳文件
  • 與 RESTful API 進行交互

????????在 ?Vue.js?項目中,Axios 是最流行、最推薦的 HTTP 請求庫之一,用來替代原生?fetch,因為它功能更強大、使用更方便、支持攔截器、取消請求等高級功能。

? ? ? ? 中文網地址:axios中文網|axios API 中文文檔 | axios

2、Axios特性

  • 從瀏覽器中創建XMLHttpRequests
  • 從 node.js 創建http請求
  • 支持 Promise API
  • 攔截請求和響應
  • 轉換請求數據和響應數據
  • 取消請求
  • 自動轉換 JSON 數據
  • 客戶端支持防御XSRF

3、Axios下載????????

????????1、使用 npm 安裝
npm install axios
? ? ? ? 2、使用 yarn 安裝
yarn add axios
? ? ? ? 3、直接通過 CDN 引入
<script src="https://cdn.jsdelivr.net/npm/axios/dist/axios.min.js"></script>
? ? ? ? 4、下載Js文件

?????????????????Gitee下載地址:https://gitee.com/mirrors/axios

4、Axios 的基本用法

????????1.、發送 GET 請求
import axios from 'axios'// 方式1:直接使用 then/catch
axios.get('https://localhost:8081/list/1').then(response => {console.log('獲取的數據:', response.data)}).catch(error => {console.error('請求出錯:', error)})// 方式2:使用 async/await(推薦)
async function fetchData() {try {const response = await axios.get('https://localhost:8081/list/1')console.log('獲取的數據:', response.data)} catch (error) {console.error('請求失敗:', error)}
}fetchData()
????????2、發送 POST 請求
axios.post('https://localhost:8081/list', {title: 'Hello Axios',body: 'This is a post sent by Axios',userId: 1
}).then(response => {console.log('創建成功:', response.data)}).catch(error => {console.error('創建失敗:', error)})
? ? ? ? 3、執行多個并發請求
function getUserAccount() {return axios.get('/user/12345');
}function getUserPermissions() {return axios.get('/user/12345/permissions');
}axios.all([getUserAccount(), getUserPermissions()]).then(axios.spread(function (acct, perms) {// 兩個請求現在都執行完成}));
? ? ? ? 4、帶參數的 GET 請求(Query 參數)
axios.get('https://localhost:8081/posts', {params: {userId: 1}
}).then(response => {console.log(response.data) // 獲取 userId 為 1 的所有文章})//實際請求的 URL 類似:
//https://localhost:8081/posts?userId=1

5、Axios 常用配置項

????????在發送請求時,可以傳入一個 ?配置對象,常用選項包括:

axios({method: 'post',                  // 請求方法:get, post, put, delete 等url: '/user/12345',              // 請求地址data: {                          // 請求體(通常用于 POST、PUT)firstName: 'John',lastName: 'Doe'},params: {                        // URL 查詢參數(GET 參數)ID: 12345},headers: {                       // 自定義請求頭'X-Custom-Header': 'foobar'},timeout: 5000                    // 請求超時時間(毫秒)
})

6、Axios 實例

????????通常我們不會直接使用全局的?axios,而是創建一個 ?Axios 實例,這樣可以:

  • 設置 ?基礎 URL?
  • 設置 ?默認請求頭(如 Token)??
  • 統一的 ?超時時間?
  • 更好的 ?模塊化管理

????????創建實例

import axios from 'axios'// 創建一個 axios 實例
const api = axios.create({baseURL: 'https://localhost:8081', // 基礎路徑timeout: 5000, // 請求超時時間headers: { 'Content-Type': 'application/json' }
})

????????使用實例發送請求

// GET
api.get('/posts/1').then(response => {console.log(response.data)})// POST
api.post('/posts', {title: 'Hello',body: 'World',userId: 1
})

7、請求 & 響應攔截器

????????在請求發出去之前或收到響應之后,統一做一些處理,比如:

  • 添加 token 到請求頭
  • 統一處理錯誤
  • 加載狀態控制
????????1、請求攔截器(Request Interceptor)
api.interceptors.request.use(config => {// 在發送請求之前做些什么const token = localStorage.getItem('token')if (token) {config.headers.Authorization = `Bearer ${token}`}console.log('請求配置:', config)return config // 必須返回 config},error => {// 請求錯誤時做些什么return Promise.reject(error)}
)
????????2、響應攔截器(Response Interceptor)
api.interceptors.response.use(response => {// 對響應數據做點什么,比如只返回 data 部分return response.data // 直接返回數據部分,簡化后續處理},error => {// 對響應錯誤做點什么if (error.response) {switch (error.response.status) {case 401:console.error('未授權,請登錄')breakcase 404:console.error('請求資源不存在')breakcase 500:console.error('服務器錯誤')breakdefault:console.error('請求錯誤:', error.response.status)}} else {console.error('網絡或未知錯誤:', error.message)}return Promise.reject(error)}
)

8、在 Vue 項目中使用 Axios

????????在實際的 Vue 項目中,通常會:

?????????????????1、封裝 axios?(創建實例 + 攔截器)

? ? ? ? ? ? ? ? 2、在 main.js 或插件中全局掛載(可選)??

? ? ? ? ? ? ? ? 3、在組件或 API 模塊中調用

????????項目結構:

src/
├── api/
│   └── user.js       # 用戶相關的接口
├── utils/
│   └── request.js    # axios 實例和基礎配置
└── components/└── ...
????????1、創建 axios 實例(utils/request.js)
// utils/request.js
import axios from 'axios'const request = axios.create({baseURL: 'https://localhost:8081', // 你的 API 地址timeout: 5000
})// 請求攔截器
request.interceptors.request.use(config => {const token = localStorage.getItem('token')if (token) {config.headers.Authorization = `Bearer ${token}`}return config},error => Promise.reject(error)
)// 響應攔截器
request.interceptors.response.use(response => response.data, // 直接返回數據部分error => {console.error('請求出錯:', error)return Promise.reject(error)}
)export default request
????????2、封裝 API 請求(api/user.js)
// api/user.js
import request from '@/utils/request'// 獲取用戶信息
export function getUser(id) {return request.get(`/users/${id}`)
}// 創建用戶
export function createUser(data) {return request.post('/users', data)
}
????????3、在 Vue 組件中使用
<template><div><button @click="fetchUser">獲取用戶</button><p v-if="user">用戶名: {{ user.name }}</p></div>
</template><script>
import { getUser } from '@/api/user'export default {data() {return {user: null}},methods: {async fetchUser() {try {const res = await getUser(1) // 獲取 ID 為 1 的用戶this.user = res} catch (error) {console.error('獲取用戶失敗:', error)}}}
}
</script>

9、Vue 3 Composition API 中使用 Axios

????????如果使用 Vue 3 的?<script setup>,代碼會更簡潔:

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

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

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

相關文章

Ubuntu 軟件源版本不匹配導致的依賴沖突問題及解決方法

在使用 Ubuntu 系統的過程中&#xff0c;軟件包管理是日常操作的重要部分。但有時我們會遇到各種依賴沖突問題&#xff0c;其中軟件源與系統版本不匹配是常見且棘手的一種。本文就來詳細分享一次因軟件源版本不匹配引發的依賴沖突問題&#xff0c;以及具體的解決思路和流程。一…

思考:高速場景的行星輪混動效率如何理解

行星輪混動 E-CVT&#xff08;電子無級變速器&#xff09;是一種專為混合動力汽車設計的動力分配系統&#xff0c;其核心原理是通過行星齒輪組和電機的協同工作&#xff0c;實現動力分流與無級變速。 一、核心結構與組成 E-CVT的核心部件包括 行星齒輪組 和 雙電機&#xff08;…

跨域及解決方案

跨域&#xff08;Cross-Origin&#xff09;是指瀏覽器在執行 JavaScript 的時候&#xff0c;因為同源策略&#xff08;Same-Origin Policy&#xff09;的限制&#xff0c;阻止了一個網頁去請求不同源&#xff08;域名、端口、協議有任意一個不同&#xff09;的資源。 1. 什么是…

PCA降維全解析:從原理到實戰

一文讀懂PCA降維&#xff1a;原理、實現與可視化全解析?本文6000字&#xff0c;涵蓋PCA核心原理、數學推導、代碼實戰及高頻面試題&#xff0c;建議收藏閱讀?一、為什么需要降維&#xff1f;數據爆炸時代的生存法則當數據集的特征維度激增&#xff08;如基因數據、推薦系統用…

Kafka工作機制深度解析:Broker、Partition 與消費者組協作原理

&#x1f42f; Kafka工作機制深度解析&#xff1a;Broker、Partition 與消費者組協作原理 &#x1f3c1; 前言 Kafka 已成為互聯網公司流式數據處理的事實標準&#xff0c;廣泛應用于日志收集、實時計算、事件驅動架構等場景。 很多開發者會用 Kafka&#xff0c;但不了解它底…

深入解析live555:開源流媒體框架的技術原理與應用實踐

引言&#xff1a;流媒體領域的"老兵"與技術基石 在實時音視頻傳輸技術的發展歷程中&#xff0c;live555作為一款誕生于1990年代末的開源項目&#xff0c;至今仍在流媒體服務器、嵌入式設備和安防監控等領域發揮著不可替代的作用。它由Live Networks公司開發并維護&a…

EN55014家用電器、電動工具和類似設備的電磁兼容

一、EN 55014標準定義與屬性&#xff1f;EN 55014 是針對家用電器、電動工具及類似設備的電磁兼容&#xff08;EMC&#xff09;標準&#xff0c;主要規定了這類產品在電磁騷擾發射&#xff08;避免干擾其他設備&#xff09;和抗擾度&#xff08;抵抗其他設備干擾&#xff09;方…

python自學筆記9 Seaborn可視化

Seaborn&#xff1a;統計可視化利器 作為基于 Matplotlib 的高級繪圖庫&#xff0c;有一下功能&#xff1a;一元特征數據 直方圖 import matplotlib.pyplot as plt import pandas as pd import seaborn as sns # import os # # 如果文件夾不存在&#xff0c;創建文件夾 # if…

kafka 消費者組的概念是什么?它是如何實現消息的點對點和發布/訂閱模式?

Kafka 消費者組&#xff08;Consumer Group&#xff09;是 Kafka 架構中的核心概念&#xff0c;它是一組共同協作來消費一個或多個主題&#xff08;Topic&#xff09;數據的消費者應用的集合。 通過簡單地為多個消費者實例配置相同的 group.id&#xff0c;它們就組成了一個消費…

C#文件復制異常深度剖析:解決“未能找到文件“之謎

一個看似簡單的文件操作問題 在C#開發中&#xff0c;文件操作是基礎中的基礎&#xff0c;但有時最基礎的File.Copy()方法也會拋出令人困惑的異常。最近我遇到了這樣一個問題&#xff1a; File.Copy(sourceFile, targetFilePath);當targetFilePath設置為D:\25Q1\MR3.6.6.1_C1.2.…

OpenCV Python——圖像查找(特征匹配 + 單應性矩陣)

1 圖像查找&#xff08;單應性矩陣&#xff09;2 單應性矩陣 應用舉例3 單應性矩陣 代碼示例P87 111 圖像查找&#xff08;單應性矩陣&#xff09; 特征匹配作為輸入&#xff0c;獲得單應性矩陣 點X在img1和img2中的成像分別為x,x 圖中H即為單應性矩陣 2 單應性矩陣 應用…

Ubuntu 安裝帶證書的 etcd 集群

1.概念 etcd 是由GO語言編寫的分布式的、可靠的鍵值存儲系統&#xff0c;主要用于分布式系統中關鍵數據的存儲和服務發現。 2.核心概念 節點&#xff08;Node&#xff09; 每個運行 etcd 的實例被稱為一個節點。一個或多個節點可以組成一個集群。 集群&#xff08;Cluster&…

360 集團20周年會:戰略升級ALL IN Agent,搶占智能體時代先機

發布 | 大力財經8月15日&#xff0c;360集團迎來二十周年&#xff0c;在北京奧林匹克體育中心舉辦的“360集團20周年榮耀慶典”上&#xff0c;創始人周鴻祎向現場數千名員工發表演講&#xff0c;回顧360集團二十年的發展歷程&#xff0c;并明確360集團下一階段的公司戰略&#…

命令模式C++

命令模式&#xff08;Command Pattern&#xff09;是一種行為型設計模式&#xff0c;它將請求封裝為一個對象&#xff0c;使你可以用不同的請求對客戶進行參數化&#xff0c;還能支持請求的排隊、記錄日志及撤銷操作。這種模式將發送者和接收者解耦&#xff0c;發送者無需知道接…

Web攻防-大模型應用LLM搭建接入第三方內容喂養AI插件安全WiKI庫技術賦能

知識點&#xff1a; 1、WEB攻防-LLM搭建-AI喂養&安全知識WIKI庫 演示案例&#xff1a;WEB攻防-LLM搭建-AI喂養&安全知識WIKI庫 使用參考 https://docs.web2gpt.ai/ https://mp.weixin.qq.com/s/qqTOW5Kg1v0uxdSpbfriaA 0、服務器環境&#xff1a;阿里云 Ubuntu22.04 …

圖片拼接-動手學計算機視覺8

前言圖片拼接&#xff08;image stitching&#xff09;就是將統一場景的不同拍攝出的圖片拼接到一起&#xff0c;如圖所示就是拼接全景圖&#xff0c;是圖片拼接的應用之一&#xff0c;手機拍照都有全景拍攝功能仔細觀察全景圖&#xff0c;尋找它們相似性&#xff0c;圖8-2的全…

Web第二次作業

作業一&#xff1a;學校官網1.1學校官網代碼如下&#xff1a;?<!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0">&l…

【CV 目標檢測】②R-CNN模型

二、R-CNN網絡基礎 2.R-CNN模型 2014年提出R-CNN&#xff01;網絡&#xff0c;該網絡不再使用暴力窮舉的方法&#xff0c;而是使用候選區域方法&#xff08;region proposal method&#xff09;創建目標檢測的區域來完成目標檢測的任務&#xff0c;R-CNN是以深度神經網絡為基礎…

STM32L051C8與STM32L151C8的主要區別

STM32L051C8與STM32L151C8 有什么區別&#xff1f; LPTIM 有什么特點,為什么STM32L151C8沒有LPTIM,而STM32L051C8有1個? 1. STM32L051C8與STM32L151C8的主要區別 STM32L051C8STM32L151C8內核Cortex-M0Cortex-M3主頻32MHz32MHz閃存/ SRAM64KB/8KB64KB/16KB工作電壓1.65V-3.6V…

【軟考中級網絡工程師】知識點之網關協議深度剖析

目錄一、網關協議基礎探秘1.1 網關協議概念1.2 網關協議作用1.3 網關協議分類總覽二、內部網關協議&#xff08;IGP&#xff09;深度解析2.1 距離矢量協議2.2 鏈路狀態協議2.3 混合型協議三、外部網關協議&#xff08;EGP&#xff09;探秘3.1 BGP 協議詳解3.2 BGP 協議的關鍵特…