Axios在鴻蒙應用開發中的使用

目錄

  • 一、簡介
  • 二、安裝與配置
  • 三、axios用法
    • 1.axios泛型參數
      • (1).第三個泛型參數-約束data請求參數的類型
      • (2).第二個泛型參數-決定后臺返回數據的類型
    • 2.axios攔截器
    • 3.請求工具封裝
      • 統一處理業務狀態碼錯誤
      • 統一處理401或404錯誤

一、簡介

Axios 是一個基于 Promise 的網絡請求庫,可以運行在 Node.js 和瀏覽器中。在鴻蒙生態中,它是基于 http 模塊封裝的優秀請求庫。

選擇 Axios 的原因:

  • 多平臺實現:可用鴻蒙、前端、NodeJS 后端
  • 質量穩定:ohos 官方推薦的第三方倉庫
  • 支持攔截器:請求攔截器,響應攔截器(通用業務處理)

Axios 的核心能力包括:

  • HTTP 請求
  • Promise API
  • request 和 response 攔截器
  • 轉換 request 和 response 的 data 數據
  • 自動轉換 JSON data 數據

接口與屬性列表
接口列表

接口參數功能
axios(config)config:請求配置發送請求
axios.create(config)config:請求配置創建實例
axios.request(config)config:請求配置發送請求
axios.get(url[, config])url:請求地址config:請求配置發送get請求
axios.delete(url[, config])url:請求地址config:請求配置發送delete請求
axios.post(url[, data[, config]])url:請求地址 data:發送請求體數據 config:請求配置發送post請求
axios.put(url[, data[, config]])url:請求地址 data:發送請求體數據 config:請求配置發送put請求

屬性列表

屬性描述
axios.defaults[‘xxx’]默認設置 。值為請求配置 config 中的配置項 例如 axios.defaults.headers 獲取頭部信息
axios.interceptors攔截器

二、安裝與配置

下載安裝
在這里插入圖片描述

需要權限
在src/main/module.json5中添加網絡權限
在這里插入圖片描述

三、axios用法

1.axios泛型參數

在這里插入圖片描述

(1).第三個泛型參數-約束data請求參數的類型

/** 賬號密碼登錄模型*/
export interface ApifoxModel1 {/*** 用戶密碼*/passwd?: string;/*** 用戶手機號*/phone?: string;
}
Button('泛型參數-約束post請求參數').onClick(async  () => {// 第三個泛型參數:約束請求體(data)參數的類型 - 重點await axios.post<null, null, PostUserLoginPasswdData>('https://guardianapi.itheima.net/user/login/passwd',{phone: '120666666666',passwd: '888itcast.CN764%...'})promptAction.showToast({message: '登錄請求發送成功'})
})

在這里插入圖片描述

(2).第二個泛型參數-決定后臺返回數據的類型

在這里插入圖片描述
在這里插入圖片描述

/*** 數據響應模型?登錄VO?*/
export interface ServiceResponse<R> {/*** 請求碼,200為成功,300及300以上為請求失敗*/code: number;/*** 響應信息*/msg?: string;/*** 響應時間*/resTime?: Date;result?: R;tips?: string;
}
/*** 登錄VO*/
export interface LoginResult {/*** 訪問token,有效期1小時*/accessToken?: string;/*** 頭像*/avatar?: string;/*** 昵稱*/nickname?: string;/*** 續期token,有效期30天*/renewalToken?: string;
}
Button('泛型參數-約束post請求參數').onClick(async  () => {// 第三個泛型參數:約束請求體(data)參數的類型 - 重點// res的類型由第二個參數來決定// 第一個泛型參數:會被覆蓋掉const res = await axios.post<null, AxiosResponse<ServiceResponse<LoginResult>, null>, PostUserLoginPasswdData>('https://guardian-api.itheima.net/user/login/passwd',{"phone": "120666666672","passwd": "888itcast.CN764%..."})promptAction.showToast({message: '登錄請求發送成功'})//AlertDialog.show({message: JSON.stringify(res, null, 2)})if (res.data.code === 200) {this.avatar = res.data.result?.avatar as string} else {}})
Image(this.avatar).width(200)
Divider().strokeWidth(1)

在這里插入圖片描述

2.axios攔截器

在請求或響應被then或catch處理前攔截它們

Button('創建axios實例').onClick(async () => {// 0.創建axios實例const axiosInstance = axios.create({baseURL: 'https://guardian-api.itheima.net',timeout: 20 * 1000  //超時時間})// 注意復制過來攔截器的結構后,把axios替換成axiosInstance 實例// 1.axios請求攔截器axiosInstance.interceptors.request.use((config: InternalAxiosRequestConfig) => {config.headers.Authorization = 'token_xxxx'console.log('interceptors request', JSON.stringify(config));return config},(error: AxiosError) => {return Promise.reject(error)})//2.添加相應攔截器axiosInstance.interceptors.response.use(//對響應數據做點兒什么(response: AxiosResponse) => {return response},(error: AxiosError) => {//對響應錯誤做點兒什么return Promise.reject(error)});// -----const res = await axiosInstance.post<null, AxiosResponseData<LoginResult>, PostUserLoginPasswdData> ('/user/login/passwd', {phone: '120666666672',passwd: '888itcast.CN764%...'})if (res.data.code === 200) {this.avatar = res.data.result?.avatar as string} else {promptAction.showToast({message: res.data.msg})}})

在這里插入圖片描述

3.請求工具封裝

統一處理業務狀態碼錯誤

// http.ets
import axios, { AxiosResponse, InternalAxiosRequestConfig, AxiosError }  from '@ohos/axios'
import { promptAction } from '@kit.ArkUI';/*** 后端響應基本類型*/
export interface ServiceResponse<T> {/** 請求碼,200為成功,300及300以上為請求失敗 */code: number;msg: string;resTime: Date;result: T;tips: string;
}// type 類型別名, 保存類型
// 三層對象嵌套:Axios 響應類型 > 后端響應基本類型 > 不同接口響應的類型
export type AxiosResponseData<Result = null> = AxiosResponse<ServiceResponse<Result>, null>export const axiosInstance = axios.create({baseURL: 'https://guardian-api.itheima.net',timeout: 1000*20
})// 添加請求攔截器
axiosInstance.interceptors.request.use((config:InternalAxiosRequestConfig) => {// 對請求數據做點什么return config;
}, (error:AxiosError) => {// 對請求錯誤做些什么return Promise.reject(error);
});// 添加響應攔截器
axiosInstance.interceptors.response.use((response:AxiosResponseData)=> {if (response.data.code == 200) {return response;} else {promptAction.showToast({message: response.data.msg})return Promise.reject() // 中斷await后續代碼的執行}// 對響應數據做點什么return response;
}, (error:AxiosError)=> {// 對響應錯誤做點什么return Promise.reject(error);
});
//Index.ets
Button('請求工具-發送登錄請求').onClick(async () => {const res = await axiosInstance.post<null,AxiosResponseData<LoginResult>, PostUserLoginPasswdData>('/user/login/passwd',{phone: '111', passwd: '222'})//直接書寫參數正確時的邏輯即可,錯誤由攔截器統一處理this.avatar = res.data.result?.avatar as stringAlertDialog.show({message: JSON.stringify(res, null, 2)})})

在這里插入圖片描述

統一處理401或404錯誤

interface GetUserMeResponse {avatar?: string;nickname?: string;
}
Button('請求工具-發送獲取我的用戶信息').onClick( async () => {const res = await axiosInstance.get<null,AxiosResponseData<GetUserMeResponse>>('/user/me')this.avatar = res.data.result?.avatar as string
})
Button('請求工具-測試錯誤url路徑').onClick(async () => {await axiosInstance.get('/user/meee')
})
// 添加響應攔截器
axiosInstance.interceptors.response.use((response:AxiosResponseData)=> {if (response.data.code == 200) {return response;} else {promptAction.showToast({message: response.data.msg})return Promise.reject() //中斷await后續代碼的執行}// 對響應數據做點什么return response;
}, (error:AxiosError)=> {// 401錯誤統一處理if(error.message.includes('401')) {promptAction.showToast({message: '登錄信息無效,請重新登錄'})} else if (error.message.includes('404')) {promptAction.showToast({message: '請求地址無效'})} else {promptAction.showToast({message: '未知網絡錯誤'})}// 清空無效的用戶信息// 對響應錯誤做點什么return Promise.reject(error);
});

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

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

相關文章

第九周文件上傳

文件上傳漏洞 不同的網站要不同的webshell。我們使用是php開發的網站。 一服務器白名單繞過 服務端白名單(Whitelist)是?種安全機制&#xff0c;它只允許預定義的合法元素通過&#xff08;只有有限的元素進入&#xff09;&#xff0c;其他所有內容默認被拒絕。相比黑名單&am…

計算機視覺必讀論文:從經典到前沿

計算機視覺必讀論文:從經典到前沿 一、前言 二、經典論文解讀? 2.1 圖像分類? 2.1.1 《ImageNet Classification with Deep Convolutional Neural Networks》(AlexNet)? 2.1.2 《Very Deep Convolutional Networks for Large-Scale Image Recognition》(VGGNet)? 2.1.…

對比PowerBI的字段參數,QuickBI的已選字段還有改進的空間

對比PowerBI的字段參數&#xff0c;QuickBI的已選字段還有改進的空間 之前分享過QuickBI的已選字段 vs PowerBI的字段參數&#xff0c;QuickBI可以在表格中實現PowerBI的字段參數效果&#xff0c;甚至比PowerBI實現的過程和使用方式更絲滑。 但如果應用到圖形中會怎么樣呢&am…

飛算JavaAI:Java開發新時代的破曉之光

免責聲明&#xff1a;此文章的所有內容皆是本人實驗測評&#xff0c;并非廣告推廣&#xff0c;并非抄襲。如有侵權&#xff0c;請聯系&#xff0c;謝謝&#xff01;【#飛算JavaAl炫技賽】 【#Java開發】摘要&#xff1a;飛算JavaAI作為全球首款聚焦Java的智能開發助手&#xff…

vulntarget-c靶場內網滲透

1. 環境搭建 2.對ubuntu20的滲透 對其進行端口掃描 訪問80端口 發現是laravel框架。版本是v8.78.1 使用 kaili 自帶的msf 進行滲透 search laravel use exploit/multi/php/ignition_laravel_debug_rce執行利用完成檢測 上傳木馬 先將木馬進行base64編碼 <?php eval($_P…

基于大模型多模態的人體體型評估:從“尺碼測量”到“視覺-感受”范式

基于大模型多模態的人體體型評估&#xff1a;從“尺碼測量”到“視覺-感受”范式摘要&#xff1a;傳統體型識別依賴CV骨架/關鍵點與像素量尺&#xff0c;容易受衣物、發型、姿態、光照影響&#xff0c;且“厘米級數值”與穿衣體驗、審美感受之間存在鴻溝。本文提出一種基于大模…

【docker】——docker國內可用的源

不知道哪里來的&#xff0c;但是可以用。1. 解決方案打開配置文件&#xff08;若文件不存在&#xff0c;會自動創建&#xff09; sudo vim /etc/docker/daemon.json將以下內容粘貼進去{"builder": {"gc": {"defaultKeepStorage": "20GB&quo…

【Windows端口管理】快速查看和釋放被系統保留的TCP端口

問題描述在Windows系統開發時&#xff0c;經常遇到端口無法使用的問題。系統會自動保留一系列TCP/UDP端口范圍&#xff0c;導致應用程序無法綁定這些端口。查看所有被保留的端口范圍查看TCP保留端口# 查看所有TCP端口排除范圍 netsh interface ipv4 show excludedportrange pro…

面經匯總(1)

1.介紹C面向對象的三大特性2.介紹常見的排序算法3.介紹TCP/UDP區別4.TCP三次握手四次揮手5.如果四次揮手第四次客戶端的ACK沒有發出去會有什么結果&#xff1f;6.介紹MYSQL的事務7.介紹線程池8.主要的線程池有哪幾種&#xff1f;9.手撕反轉鏈表10.介紹對象存儲以及常見的對象存…

遙感圖像數字水印系統優化方案

遙感圖像數字水印系統優化方案 1. 引言 遙感圖像在現代地理信息系統、環境監測、軍事偵察等領域發揮著重要作用。為了保護遙感圖像的版權和完整性&#xff0c;數字水印技術被廣泛應用。然而&#xff0c;現有的遙感圖像水印方案往往在不可見性、魯棒性和容量之間存在權衡&#x…

鴻蒙高效數據處理框架全攻略:緩存、并行與流式實戰

摘要 在如今的物聯網和智能設備世界里&#xff0c;數據已經成為最關鍵的資源。無論是可穿戴設備、智能家居&#xff0c;還是車載系統&#xff0c;每一秒都會產生大量數據。如果缺少一套高效的數據處理框架&#xff0c;開發者就可能面臨內存溢出、處理延遲大、設備卡頓等問題。本…

零售企業數字化轉型的道、法、術:基于開源AI大模型AI智能名片S2B2C商城小程序的戰略重構

摘要 在數字經濟與消費升級的雙重驅動下&#xff0c;零售企業正經歷從"流量爭奪"到"用戶時間爭奪"的范式轉變。本文以阿里巴巴、京東、萬達三大巨頭的戰略實踐為樣本&#xff0c;結合開源AI大模型、AI智能名片與S2B2C商城小程序的技術特性&#xff0c;提出…

瑞云渲染為電影《731》提供云渲染技術支持,助力影片全球上映

在“九一八事變”94周年這一莊嚴沉重的紀念時刻&#xff0c;抗戰電影《731》&#xff08;海外名&#xff1a;《EVIL UNBOUND》&#xff09;于世界各地上映&#xff0c;激起廣泛的社會反響與深遠的歷史思考。 瑞云渲染&#xff08;Renderbus&#xff09;作為全球領先的云渲染服…

EasyDSS視頻直播RTMP推流技術如何實現多機型的無人機視頻統一直播

在當今這個瞬息萬變的傳媒時代&#xff0c;無人機與推流直播的結合&#xff0c;正以前所未有的方式重塑著信息傳播的邊界。無人機以其獨特的空中視角和靈活的機動性&#xff0c;為直播行業帶來了革命性的變化&#xff0c;而推流直播技術的成熟&#xff0c;則讓這一變化得以實時…

str.maketrans() 方法

str.maketrans() 方法 功能概述 str.maketrans() 是 Python 中字符串對象的一個靜態方法&#xff0c;用于創建一個字符映射轉換表。這個轉換表本質上是一個字典&#xff0c;它定義了字符之間的替換規則&#xff0c;后續可以被 str.translate() 方法使用&#xff0c;以實現字符串…

敏感詞檢測API平臺推薦

敏感詞檢測API平臺推薦 背景簡介 敏感詞檢測用于識別文本中的違規、涉政、涉黃、辱罵等敏感詞&#xff0c;幫助產品在評論、彈幕、客服對話、運營文案、廣告投放等環節實現自動化質檢與合規攔截。市場上主要有兩類服務商&#xff1a; 專業型廠商&#xff1a;聚焦算法與工程落…

Day25_【深度學習(3)—PyTorch使用(6)—張量拼接操作】

張量的拼接操作在神經網絡搭建過程中是非常常用的方法&#xff0c;例如: 在后面將要學習的注意力機制中都使用到了張量拼接。torch.cat 函數可以將兩個張量根據指定的維度拼接起來&#xff0c;不改變數據維度。前提&#xff1a;除了拼接的維度&#xff0c;其他維度一定要相同。…

機器視覺在PCB制造中的檢測應用

機器視覺在PCB制造中的檢測應用&#x1f3af;機器視覺在PCB制造中的檢測應用&#x1f3af;一、基材預處理階段&#xff1a;基材表面缺陷檢測&#x1f3af;二、線路制作階段&#xff1a;線路精度與缺陷檢測&#x1f3af;三、鉆孔與導通孔加工階段&#xff1a;孔位與孔質量檢測&a…

Python面試題及詳細答案150道(136-150) -- 網絡編程及常見問題篇

《前后端面試題》專欄集合了前后端各個知識模塊的面試題&#xff0c;包括html&#xff0c;javascript&#xff0c;css&#xff0c;vue&#xff0c;react&#xff0c;java&#xff0c;Openlayers&#xff0c;leaflet&#xff0c;cesium&#xff0c;mapboxGL&#xff0c;threejs&…

【pdf.js】pdf檢索對應文本和高亮功能

文章目錄需求場景1、使用pdf.js解決pdf.js跨域2、預覽方案3、檢索方案4、實現效果??總結需求場景 本文主要針對網頁端 PDF 本地預覽場景&#xff0c;支持通過關鍵字對 PDF 進行檢索查詢&#xff0c;當點擊檢索結果列表中的對應關鍵字時&#xff0c;可同步在預覽界面中觸發內容…