一篇文章熟練掌握 Axios

Axios是什么

Axios是一個基于Promise的網絡請求庫,作用于node.js和瀏覽器中。在服務端使用原生node.js http模塊,在客戶端使用XMLHttpRequest。是基于Promise對Ajax的封裝。

Axios的特性

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

安裝

npm i axios
yarn add axios

Axios基本使用

使用前記得導入axios
發送GET請求:

axios.get('/user?id=1234').then(res => {console.log(res)}).catch(error => {console.log(error)}).then(() => {//總會執行})

注意傳遞參數的方式,路徑后加’?'后拼接參數。還可以用另一種方式傳遞參數:

axios.get('/user',{params: {id: 1234}
}).then(res => {console.log(res)}).catch(error => {console.log(error)}).then(() => {//總會執行})

不在地址后面進行拼接,axios.get()這個方法第一個參數是要請求的路徑,第二個參數是一個對象,可以在這個對象中加一些配置,參數就寫在這里的params里面。也可以使用async/await:

async function getUser(){try{const res = await axios.get('/user?id=1234')console.log(res)}catch (error){console.error(error)}
}

注意要用一個函數包裹起來并在前面加上async,注意要使用try-catch捕獲錯誤,注意await的位置。

POST請求/多請求

發送一個POST請求:

axios.post('/user',{firstname: 'qiling',lastname: 'wuxie'
}).then(res => {console.log(res)
}).catch(error => {console.log(error)
})

axios.post() 方法的第一個參數是請求的地址,第二個參數是一個對象,是要post的數據。
如果發起多個請求可以使用Promise.all。這個方法可以處理多個Promise:

function getUserAccount() {return axios.get('/user/12345');
}function getUserPermissions() {return axios.get('/user/12345/permissions');
}Promise.all([getUserAccount(), getUserPermissions()]).then(function (results) {const acct = results[0];const perm = results[1];});

注意Promise.all()接收的參數是一個Promise對象數組,后面.then接收到的結果也是一個數組,是一個由上面的Promise對象數組返回的結果構成的數組。

Axios實例

使用自定義配置新建一個實例:

const instance = axios.create({baseURL: 'http://some-domain.com/api/',timeout: 1000,headers: {'X-Custom-Header': 'foobar'}
})

axios.get()等方法都是實例方法。

請求配置

以下是創建請求時可以使用的配置。只有url是必須的。不指定method,請求就默認是GET

  • url 請求的服務器的url
  • method 創建請求時使用的方法
  • baseURL 自動加在url前面
  • transformRequest: [function(data, header) { return data }]發請求前修改請求數據,只能用于post,put,patch
  • transformResponse: [function (data) { return data }] 傳遞給 .then/catch之前修改相應數據
  • headers: {‘X-Requested-With’: ‘XMLHttpRequest’} 自定義請求頭
  • params: { id: 12345 } 設置與請求一起發送的URL參數,必須是簡單對象
  • data: { firstname: ‘qiling’ } 作為請求體被發送的數據
  • timeout 指定請求超時的毫秒數
  • proxy 定義代理服務器的主機名,端口,協議
  • validatestatus: function (status) { return status >= 200 && status < 300; // 默認值 } 如果返回true就resolved,否則就是rejected
  • cancelToken: new CancelToken(function (cancel) { }) 使用cancel token取消請求,cancel token由CancelToken.source()創建

響應結構

一個請求的響應包含以下信息:

{//服務器提供的響應data: {},//來自服務器響應的HTTP狀態碼status: 200,//來自服務器響應的狀態信息statusText: 'OK',//服務器響應頭headers: {},//axios請求的配置信息config: {},//生成此響應的請求,在瀏覽器中是XMLHttpRequest實例request: {}
}

使用.then 時將獲得以下相應:

axios.get('/user/12345').then(function (response) {console.log(response.data);console.log(response.status);console.log(response.statusText);console.log(response.headers);console.log(response.config);});

數據,狀態碼,狀態信息,響應頭,請求的配置信息,生成此響應的請求。如果使用catch,相應可通過error對象被使用。

攔截器

在請求或響應在被then和catch處理之前攔截它們
添加請求攔截器:

axios.interceptors.request.use(function (config) {//在發送請求之前做什么return config
},function (error){//對請求錯誤做些什么return Promise.reject(error)
})

添加響應攔截器:

axios.interceptors.request.use(function (response){//2xx范圍內的狀態瑪都會觸發這個函數//對相應數據做些什么return response
}, function (error) {//超出2xx范圍的狀態碼都會觸發這個函數//對相應錯誤做些什么return return Promise.reject(error)
})

移除攔截器:

const myInterceptor = axios.interceptors.request.use(function () {/*...*/});
axios.interceptors.request.eject(myInterceptor);

自己定義的axios實例也可以添加攔截器:

const instance = axios.create();
instance.interceptors.request.use(function () {/*...*/});

錯誤處理

axios.get('/user/12345').catch(function (error) {if(error.response) {//請求成功且得到響應,但是狀態碼不是2xx....} else if(error.request){//請求成功,沒得到響應//`error.request` 在瀏覽器中是 XMLHttpRequest 的實例....}else {//請求的發送出問題了console.log(error.message)}})

默認是超出2xx范圍就錯誤,但是使用使用 validateStatus 配置選項,可以自定義拋出錯誤的 HTTP code。

axios.get('/api',{//注意要把status作為參數傳進去validateStatus: function (status) {return status < 500}
})

可以對error對象進行toJSON獲取更多錯誤信息:

axios.get('/user/12345').catch(function (error) {console.log(error.toJSON());});

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

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

相關文章

基于OpenCV的人臉識別系統案例

基于OpenCV的人臉識別系統案例 人臉識別簡介代碼實現案例應用情況 下面將介紹如何使用Python和OpenCV庫構建一個簡單但強大的人臉識別系統。人臉識別是計算機視覺領域的一個重要應用&#xff0c;具有廣泛的實際用途&#xff0c;從安全門禁到娛樂應用。 人臉識別簡介 人臉識別是…

MySQL - 表達式With as 語句的使用及練習

目錄 8.1 WITH AS 的含義 8.2 WITH AS語法的基本結構如下&#xff1a; 8.3 練習題1 8.4 牛客練習題 8.1 WITH AS 的含義 WITH AS 語法是MySQL中的一種臨時結果集&#xff0c;它可以在SELECT、INSERT、UPDATE或DELETE語句中使用。通過使用WITH AS語句&#xff0c;可以將一個查…

量子芯片技術:未來的計算革命

量子芯片技術&#xff1a;未來的計算革命 一、引言 隨著科技的不斷發展&#xff0c;人類正在進入一個全新的技術時代&#xff0c;即量子時代。量子芯片技術作為這個時代的重要代表&#xff0c;正逐漸改變我們對計算和信息處理的理解。本文將深入探討量子芯片技術的基本原理、…

Navicat 技術指引 | 適用于 GaussDB 分布式的服務器對象的創建/設計

Navicat Premium&#xff08;16.3.3 Windows版或以上&#xff09;正式支持 GaussDB 分布式數據庫。GaussDB分布式模式更適合對系統可用性和數據處理能力要求較高的場景。Navicat 工具不僅提供可視化數據查看和編輯功能&#xff0c;還提供強大的高階功能&#xff08;如模型、結構…

Java入門 EditPlus的安裝與配置講解

寫Java程序不建議使用EditPlus&#xff0c;首選idea社區版&#xff0c;其次是vscode&#xff0c; 然后是eclipse 。editplus說實話排不上號。 但既然小伙伴想了解一下怎么配置&#xff0c;這里就簡單說一下。 下載 首先是jdk&#xff0c;jdk是Java開發和運行的基礎&#xff…

EVT_WDF_DEVICE_PREPARE_HARDWARE API

NTSTATUS EVT_WDF_DEVICE_PREPARE_HARDWARE(__inWDFDEVICE Device,__inWDFCMRESLIST ResourcesRaw,__inWDFCMRESLIST ResourcesTranslated); 上面API中ResourcesRaw和ResourcesTranslated類型相同&#xff0c;那他們的區別是啥&#xff1f; 答&#xff1a; EVT_WDF_DEVICE_P…

【前端設計模式】之訪問者模式

引言 在前端開發中&#xff0c;我們經常需要處理復雜的對象結構和數據集合。這時候&#xff0c;訪問者模式就能派上用場了。訪問者模式允許我們將操作和數據結構分離開來&#xff0c;從而實現對復雜對象結構的優雅處理。 訪問者模式的特性 訪問者模式具有以下特性&#xff1…

iview Table實現跨頁勾選記憶功能以及利用ES6的Map數據結構實現根據id進行對象數組的去重

因為iview Table組件的勾選是選中當前頁的所有數據,當我們切到別的頁面時,會發送請求給后端,這個時候就會刷新我們之前頁碼已經選中的數據。現在有個需求就是,在我們選擇不同頁碼的數據勾選中之后,實現跨頁勾選記憶功能,就是說已經打鉤了的數據,不管切到哪一頁它都是打鉤…

AI聊天專題報告:ChatGPT全景圖聊聊技術產品和未來

今天分享的AI系列深度研究報告&#xff1a;《AI聊天專題報告&#xff1a;ChatGPT全景圖聊聊技術產品和未來》。 &#xff08;報告出品方&#xff1a;LanguageX&#xff09; 報告共計&#xff1a;22頁 爭論&#xff1a;ChatGPT算不算技術革命 回應吳軍老師“ChatGPT不算新技術…

Navicat 技術指引 | 適用于 GaussDB 分布式的模型功能

Navicat Premium&#xff08;16.3.3 Windows 版或以上&#xff09;正式支持 GaussDB 分布式數據庫。GaussDB 分布式模式更適合對系統可用性和數據處理能力要求較高的場景。Navicat 工具不僅提供可視化數據查看和編輯功能&#xff0c;還提供強大的高階功能&#xff08;如模型、結…

Dubbo學習

一、整體架構設計分層 接口服務層&#xff08;Service&#xff09;:該層與業務邏輯相關&#xff0c;根據provider和consumer的業務設計對應的接口和實現 配置層&#xff08;Config&#xff09;&#xff1a;對外配置接口&#xff0c;以ServiceConfig和ReferenceConfig為中心 服…

cache 2.單機并發緩存

0.對原教程的一些見解 個人認為原教程中兩點知識的引入不夠友好。 首先是只讀數據結構 ByteView 的引入使用是有點迷茫的&#xff0c;可能不能很好理解為什么需要ByteView。 第二是主體結構 Group的引入也疑惑。其實要是熟悉groupcache&#xff0c;那對結構Group的使用是清晰…

線性回歸與邏輯回歸:深入解析機器學習的基石模型

目錄 一、線性回歸 二、邏輯回歸 邏輯回歸算法和 KNN 算法的區別 分類算法評價維度

QT作業2

使用手動連接&#xff0c;將登錄框中的取消按鈕使用qt4版本的連接到自定義的槽函數中&#xff0c;在自定義的槽函數中調用關閉函數 將登錄按鈕使用qt5版本的連接到自定義的槽函數中&#xff0c;在槽函數中判斷ui界面上輸入的賬號是否為"admin"&#xff0c;密碼是否為…

Navicat 技術指引 | 適用于 GaussDB 分布式的數據查看器

Navicat Premium&#xff08;16.3.3 Windows 版或以上&#xff09;正式支持 GaussDB 分布式數據庫。GaussDB 分布式模式更適合對系統可用性和數據處理能力要求較高的場景。Navicat 工具不僅提供可視化數據查看和編輯功能&#xff0c;還提供強大的高階功能&#xff08;如模型、結…

微服務學習:Nacos微服務架構中的服務注冊、服務發現和動態配置Nacos下載

Nacos的主要用途包括&#xff1a; 服務注冊與發現&#xff1a;Nacos提供了服務注冊和發現的功能&#xff0c;服務提供者可以將自己的服務注冊到Nacos服務器上&#xff0c;服務消費者則可以通過Nacos來發現可用的服務實例&#xff0c;從而實現服務調用。 動態配置管理&#xff…

聚觀早報 |華為暢享 70正式開售;夢餉科技雙12玩法

【聚觀365】12月8日消息 華為暢享 70正式開售 夢餉科技雙12玩法 華為Mate X5應對火海挑戰 谷歌發布AI模型Gemini 字節跳動開啟新一輪回購 華為暢享 70正式開售 精致外觀與創新科技兼具的華為暢享 70正式開售&#xff0c;1199元起搭載6000mAh超大電池&#xff0c;帶來超強…

機器視覺相機鏡頭光源選型

鏡頭選型工具 - HiTools - 海康威視 Hikvisionhttps://www.hikvision.com/cn/support/tools/hitools/cl8a9de13648c56d7f/ 海康機器人-機器視覺產品頁杭州海康機器人股份有限公司海康機器人HIKROBOT是面向全球的機器視覺和移動機器人產品及解決方案提供商&#xff0c;業務聚焦于…

oracle與sqlsever的區別

oracle與sqlsever的區別 區別一 oracle字符之間連接用|| sqlserver字符之間連接用區別二 oracle字段重命名用as sqlserver字段重命名用區別三 oracle判空用nvl sqlserver判空用isnull區別四 oracle多列合并成一列 select assid, LISTAGG(name, ) within group (order by…

Navicat 技術指引 | 適用于 GaussDB 分布式的數據生成功能

Navicat Premium&#xff08;16.3.3 Windows 版或以上&#xff09;正式支持 GaussDB 分布式數據庫。GaussDB 分布式模式更適合對系統可用性和數據處理能力要求較高的場景。Navicat 工具不僅提供可視化數據查看和編輯功能&#xff0c;還提供強大的高階功能&#xff08;如模型、結…