Vue中的axios深度探索:從基礎安裝到高級功能應用的全面指南

在這里插入圖片描述


文章目錄

  • 前言
  • 一、axios 請求
    • 1. axios的概念
    • 2. axios的安裝
    • 3. axiso請求方式介紹
    • 4. axios請求本地數據
    • 5. axios跨域
    • 6. axios全局注冊
    • 7. axios支持的請求類型
      • 1)get請求
      • 2)post請求
      • 3)put請求
      • 4)patch請求
      • 5)delete請求
  • 二、axios 進階
    • 1. 設置axios攔截器
      • 什么是攔截器
      • 攔截器的作用和使用
    • 2. axios 封裝


前言

????在Vue項目中,高效的前后端通信是構建豐富用戶體驗的關鍵。axios作為前端與后端溝通的橋梁,其重要性不言而喻。本文將帶您領略axios的魅力,從基本概念、安裝方法,到高級應用技巧,助您快速掌握在Vue中利用axios進行HTTP請求的精髓。我們不僅會探討axios的基礎用法,如GET、POST請求,還將深入探索跨域配置、全局注冊以及設置攔截器等高級功能,助您輕松實現優雅的前后端通信。


一、axios 請求

1. axios的概念

axios 是一個基于Promise 用于瀏覽器和 nodejs 的 HTTP 客戶端。簡單的理解就是ajax的封。

它本身具有以下特征:

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

2. axios的安裝

npm install axios --save

3. axiso請求方式介紹

使用格式:

axios.提交方式("請求接口路徑").then(箭頭函數).catch(箭頭函數)- 提交方式有get post delete put 等,- .then() 請求成功后執行then方法- .catch()請求失敗后執行catch方法

例如:get具體使用方法如下:

//使用axios發送ajax請求,獲取所有新聞信息fnSerachNews(){// result是服務端對我們發起請求的響應,請求成功執行then方法this.$axios.get("http://localhost:8000/news/").then((result) => {//通過response獲取具體數據,賦值給data中定義的newslist this.newslist = result.data.dataconsole.log(result.data.data);}).catch((err) => {//請求失敗執行catch方法alert(err)});},

4. axios請求本地數據

1. 在static文件夾底下新建json文件

2. data.json數據格式如下:

{"first":[{"name":"張三","nick":"法外狂徒"},{"name":"李四","nick":"小李子"},{"name":"王五","nick":"小五"}]
}

3. 在創建的TestView.vue中實現獲取本地數據

<template><div><button @click="getData">獲取本地數據</button><p>{{ data.first }}</p><ul v-for="(n, index) in data1.first" :key="index"><li>{{ n.name }}</li><li>{{ n.nick }}</li></ul></div>
</template><script>
import Axios from "axios";
export default {name: "test",data() {return {// 定義變量, object 類型.data1: {},};},methods: {getData() {//   使用axios 請求本地數據//   axios.請求方式("請求接口路徑").then(箭頭函數).catch(箭頭函數)Axios.get("../../../a.json").then((response) => {// 把獲取到的數據賦值給變量,然后展示console.log(response);console.log(response.data, typeof response.data);this.data1 = response.data;}).catch((error) => {// 請求失敗console.log(error);});},},
};
</script>
<style lang="scss" scoped></style>

5. axios跨域

跨域的簡單介紹及后端解決辦法:點這0.0

這里在前端解決跨域:

const { defineConfig } = require('@vue/cli-service')
module.exports = defineConfig({transpileDependencies: true,lintOnSave:false, /*關閉語法檢查*///開啟代理服務器(方式一)vue3可能會由問題,如果第一種方式不可以,使用下面方式devServer: {proxy: 'http://127.0.0.1:8000'}, //開啟代理服務器(方式二)devServer: {proxy: {//第一個跨域代理'/app': {target: 'http://127.0.0.1:8000/', //接口域名changeOrigin: true,             //是否跨域ws: true,                       //是否代理 websocketssecure: false,                   //是否https接口// pathRewrite: {    //路徑重置如果需要重置,可以重置成target地址//     '^/app':''// }},//第二個跨域代理'/home': {target: 'http://127.0.0.1:8000/',ws: true, //用于支持websocketchangeOrigin: true //用于控制請求頭中的host值// pathRewrite: {                  //路徑重置//     '^/app':''// }}}}
})

6. axios全局注冊

// main.js
import { createApp } from 'vue'
import App from './App.vue'import  Axios  from "axios";
// 跨越配置好以后,測試結果
// Axios.defaults.baseURL = "http:127.0.0.1:8000"
const app = createApp(App)app.config.globalProperties.$axios = Axiosapp.mount('#app')

7. axios支持的請求類型

1)get請求

不帶請求參數:

  • 方式一: axios({ methods: 'get', url: '/ulr' })
  • 方式二: axios.get('/url')


帶請求參數:

  • 方式一: axios.get('/url', {params: {id: 12}})
    • 請求的地址實際為 http://localhost:8080/url?id=12
  • 方式二: axios({
    ??????????methods: ‘get’,
    ??????????url: ‘url’,
    ??????????params: {
    ??????????????id:12
    ?????????? }
    ????????})

2)post請求

let data = {}
let config = {}
方式一:  axios.post('/url',data,config)
方式二:  axios({methods: 'post',url: '/url',data: data,config: config
})

3)put請求

該請求和post類似,只是請求方法接口不同,傳入對象的methods不同

4)patch請求

該請求和post類似,只是請求方法接口不同,傳入對象的methods不同

5)delete請求

axios.delete('/url', {params: {id: 12}}) #參數在url params---很重要
axios.delete('/url', {data: {id: 12}}) #參數在請求體中 將params改為 data就行 

二、axios 進階

1. 設置axios攔截器

什么是攔截器

request請求攔截器:發送請求前統一處理,如:設置請求頭headers、應用的版本號、終端類型等。


response響應攔截器:有時候我們要根據響應的狀態碼來進行下一步操作,例如:由于當前的token過期,接口返回401未授權,那我們就要進行重新登錄的操作。

攔截器的作用和使用

1. 作用:

  • 比如config中的一些信息不符合服務器的要求,得及時攔截下來更改。
  • 比如每次發送網絡請求的時候,都希望在界面中顯示一個動態加載的請求圖標,就是一直在轉圈圈,讓用戶知道當前頁面正在加載數據,準備渲染視圖。
  • 比如某些網絡請求(比如登錄token),必須攜帶一些特殊的信息。


2. 實現步驟:

const instance = axios.create({//baseURL:url,timeout:5000  // 延時
})1、在requesr.js中設置請求攔截器
interceptors.request.use()
2、設置響應攔截器
interceptors.response.use()

核心代碼:

// 請求攔截
instance.interceptors.request.use(function (config) {console.group('全局請求攔截')console.log(config)return config},function (err){return Promise.reject(err)}
)// 響應攔截
// 服務器返回數據之后都會先執行此方法
instance.interceptors.response.use(function (response){console.group('全局響應攔截')console.log(response)return response},function (err){return Promise.reject(err)}
)

2. axios 封裝

//  utils/request.js
import axios from "axios";
// const baseURL = "http://127.0.0.1:8000"; // 更換成自己的API接口地址
const axiosIns = axios.create({
//   baseURL,timeout: 10 * 1000 // 超時時間設置為10秒
});
// 封裝get請求,并將封裝的方法暴露出去
export const get = (url, params) => {return axiosIns.get(url,{params})
}
// 封裝post請求
export const post = (url, data) => {return axiosIns.post(url,data)
}
// 封裝put請求
export const put = (url, data) => {return axiosIns.put(url,data)
}
// 封裝delete請求
export const del = (url, data) => {return axiosIns.delete(url,{data})
}
................................................
// 封裝getget("https:/localhost:8000/news", {page: 3,per: 3,}).then((resp) => {console.log(resp.data);}).catch((error) => {console.log(error);});
....................................................        
// 封裝post
post('https:/localhost:8000/news/login',{userName:'xiaoming',password:'111111'}).then(res=>{console.log(res)}).catch(err=>{console.log(err)})

在這里插入圖片描述

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

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

相關文章

MyBatis操作數據庫(入門)

本節目標 使用MyBatis完成簡單的增刪改查操作&#xff0c;參數傳遞掌握MyBatis的兩種寫法&#xff1a;注解和XML方式掌握MyBatis相關的日志配置 前言 在應用分層學習中&#xff0c;我們了解web應用程序一般分為三層&#xff0c;即Controller、Service、Dao。在之前的案例中&a…

化學SCI期刊,中科院4區,易錄用,幾乎不退稿

一、期刊名稱 Chemical Papers 二、期刊簡介概況 期刊類型&#xff1a;SCI 學科領域&#xff1a;化學 影響因子&#xff1a;2.1 中科院分區&#xff1a;4區 三、期刊征稿范圍 該雜志致力于基礎和應用化學和化學工程研究。它的范圍很廣&#xff0c;涵蓋了所有化學科學&…

2024年江蘇智能制造工廠名單:我看出了未來擇業和跳槽方向

導語 大家好&#xff0c;我是社長&#xff0c;老K。專注分享智能制造和智能倉儲物流等內容。 新書《智能物流系統構成與技術實踐》 在當今這個飛速發展的時代&#xff0c;智能制造已成為推動工業進步的強大引擎。隨著技術革新的浪潮一波接一波地涌來&#xff0c;我們不禁要問&a…

動手學深度學習(Pytorch版)代碼實踐 -計算機視覺-49風格遷移

49風格遷移 讀入內容圖像&#xff1a; import torch import torchvision from torch import nn import matplotlib.pylab as plt import liliPytorch as lp from d2l import torch as d2l# 讀取內容圖像 content_img d2l.Image.open(../limuPytorch/images/rainier.jpg) plt.…

使用 Swift 遞歸搜索目錄中文件的內容,同時支持 Glob 模式和正則表達式

文章目錄 前言項目設置查找文件讀取CODEOWNERS文件解析規則搜索匹配的文件確定文件所有者輸出結果總結前言 如果你新加入一個團隊,想要快速的了解團隊的領域和團隊中擁有的代碼庫的詳細信息。 如果新團隊中的代碼庫在 GitHub / GitLab 中并且你不熟悉代碼所有權模型的概念或…

Unity開箱即用的UGUI面板的拖拽移動功能

文章目錄 &#x1f449;一、背景&#x1f449;二、效果圖&#x1f449;三、原理&#x1f449;四、核心代碼&#x1f449;五&#xff0c;總結 &#x1f449;一、背景 之前做PC項目時常常有面板拖拽移動的需求&#xff0c;今天總結封裝一下&#xff0c;做成一個隨時隨地可復用的…

More Effective C++ 35個改善編程與設計的有效方法筆記與心得 3

三. 異常 條款9&#xff1a; 利用destructors避免泄露資源 ????  在編程中&#xff0c;"資源"可以指任何系統級的有限資源&#xff0c;如內存、文件句柄、網絡套接字等。"泄露"則是指在應用程序中分配了資源&#xff0c;但在不再需要這些資源時沒有…

Linux 安裝 Redis 教程

優質博文&#xff1a;IT-BLOG-CN 一、準備工作 配置gcc&#xff1a;安裝Redis前需要配置gcc&#xff1a; yum install gcc如果配置gcc出現依賴包問題&#xff0c;在安裝時提示需要的依賴包版本和本地版本不一致&#xff0c;本地版本過高&#xff0c;出現如下問題&#xff1a…

Jupyter無法導入庫,但能在終端導入的問題

Jupyter無法導入庫&#xff0c;但能在終端導入 ?錯誤問題描述&#xff1a;conda activate LLMs激活某個Conda的環境后&#xff0c;盡管已經通過conda或者pip在這個環境中安裝了一些&#x1f40d;Python的庫&#xff0c;但無法在Jupyter中導入&#xff0c;卻能在終端成功導入。…

京東商品詳情數據接口(JD.item_get)丨京東API實時接口指南

京東商品詳情API接口&#xff08;JD.item_get&#xff09;是京東開放平臺提供的一個數據接口&#xff0c;用于獲取京東平臺上單個商品的詳細信息。 通過這個接口&#xff0c;開發者可以獲取到包括商品名稱、品牌、產地、規格參數、價格信息、銷量、評價、圖片、描述等在內的詳…

Node.js開發實戰 視頻教程 下載

ode.js開發實戰 視頻教程 下載 下載地址 https://download.csdn.net/download/m0_67912929/89487510 01-課程介紹.mp4 02-內容綜述.mp4 03-Node.js是什么? .mp4 04-Node.js可以用來做什么?.mp4 05-課程實戰項目介紹.mp4 06-什么是技術預研? .mp4 07-Node.js開發環境…

Windows 11 安裝 安卓子系統 (WSA)

How to Install Windows Subsystem for Android (WSA) on Windows 11 新手教程&#xff1a;如何安裝Windows 11 安卓子系統 說明 Windows Subsystem for Android 或 WSA 是由 Hyper-V 提供支持的虛擬機&#xff0c;可在 Windows 11 操作系統上運行 Android 應用程序。雖然它需…

【JS】注意考點

1.聲明變量時所遵循的規則&#xff1a; (1)可以使用一個保留關鍵字var同時聲明多個變量 (2)可以在聲明變量的同時對其賦值&#xff0c; (3)如果只是聲明了變量&#xff0c;并未對其賦值&#xff0c;其值就默認為 Undefined。 (4)保留關鍵字var可以用作for語句和for…in語句…

python基礎_類

在Python中&#xff0c;類&#xff08;Class&#xff09;是面向對象編程&#xff08;OOP&#xff09;的核心概念之一。類提供了一種創建新對象的模板&#xff0c;這些對象通常被稱為類的實例或對象。以下是關于Python類的一些關鍵點和特性&#xff1a; 定義類 類通過class關鍵…

PostgreSQL的系統視圖pg_stat_wal

PostgreSQL的系統視圖pg_stat_wal 在 PostgreSQL 數據庫中&#xff0c;pg_stat_wal 視圖提供了與 WAL&#xff08;Write-Ahead Logging&#xff09;日志有關的統計信息。WAL 是 PostgreSQL 用于確保數據一致性和持久性的重要機制。因此&#xff0c;監控和分析 WAL 活動對于數據…

ctfshow-web入門-命令執行(web71-web74)

目錄 1、web71 2、web72 3、web73 4、web74 1、web71 像上一題那樣掃描但是輸出全是問號 查看提示&#xff1a;我們可以結合 exit() 函數執行php代碼讓后面的匹配緩沖區不執行直接退出。 payload&#xff1a; cvar_export(scandir(/));exit(); 同理讀取 flag.txt cinclud…

文華財經博易大師盤立方多空波段止損畫線指標公式

TT:PERIOD7; EMA120:EMA(C,120); RSV:(CLOSE-LLV(LOW,9))/(HHV(HIGH,9)-LLV(LOW,9))*100; K:SMA(RSV,3,1); D:SMA(K,3,1); J:3*K-2*D; DRAWTEXT(TT&&J<0,L,多),VALIGN0; DRAWTEXT(TT&&J>100,H,空),VALIGN2; IF(TT,EMA(C,60),NULL),RGB(255,255,2…

JavaScript數組對象 , 正則對象 , String對象以及自定義對象介紹

1. Array數組對象 數組對象是使用單獨的變量名來存儲一系列的值。 1.1創建一個數組 創建一個數組&#xff0c;有三種方法。 【1】常規方式: let 數組名 new Array();【2】簡潔方式: 推薦使用 let 數組名 new Array(數值1,數值2,...);【3】字面:在js中創建數組使用中括號…

【ubuntu 】使用samba配置共享用戶home目錄和其他具體路徑

目錄 1 安裝samba 2 修改Samba配置文件 3 增加Rose用戶的samba帳號 4 重啟samba 5 測試 1 安裝samba 使用如下命令安裝samba&#xff1a; sudo apt-get updatesudo apt-get install samba openssh-server 2 修改Samba配置文件 sudo cp /etc/samba/smb.conf /etc/samba…

試用筆記之-收錢吧安卓版演示源代碼,收錢吧手機版感受

首先下載&#xff1a; https://download.csdn.net/download/tjsoft/89499105 安卓手機安裝 如果有收錢吧帳號輸入收錢吧帳號和密碼。 如果沒有收錢吧帳號點我的注冊 登錄收錢吧帳號后就可以把手機當成收錢吧POS機用了&#xff0c;還可以掃客服的付款碼哦 源代碼技術交流QQ:42…