OpenHarmony實戰開發——網絡組件axios可以在OpenHarmony上使用了

什么是axios

上古瀏覽器頁面在向服務器請求數據時,因為返回的是整個頁面的數據,頁面都會強制刷新一下,這對于用戶來講并不是很友好。并且我們只是需要修改頁面的部分數據,但是從服務器端發送的卻是整個頁面的數據,十分消耗網絡資源。而我們只是需要刷新頁面的部分數據,并不希望刷新整個頁面。于是一種新的技術,異步網絡請求Ajax(Asynchronous JavaScript and XML)隨之產生,它能與后臺服務器進行少量數據交換,使網頁實現異步更新。這意味著可以在不重載整個頁面的情況下,對網頁的某些部分進行更新。

然而由于瀏覽器中原生的XMLHttpRequest API較難使用,于是又有了更多用于實現ajax的javascript框架,比如我們熟悉的jQuery、Dojo、YUI等等。而如今一個叫axios的輕量框架逐步脫穎而出,目前在github的戰績已經達到了Fork9.6k+和Star94k+,它本質上也是對原生XHR的封裝,只不過它是Promise的實現版本,符合最新的ES規范,有以下特點:

● 從瀏覽器中創建 XMLHttpRequests

● 從 node.js 創建 http 請求

● 支持 Promise API

● 攔截請求和響應

● 轉換請求數據和響應數據

● 取消請求

● 自動轉換 JSON 數據

在OpenHarmony應用中使用axios

我們可以看到axios既可以在瀏覽器中使用,又可以在Nodejs中使用,而如今隨著OpenHarmony ArkUI的發展,axios又有了新的用武之地,即在OpenHarmony標準系統的應用中使用:可用于網絡請求和上傳下載文件,并完全繼承axios原生的用法和所有特性。

對,你沒有看錯,axios確實是可以在OpenHarmony上使用了。下面簡單介紹下,如何在OpenHarmony應用中使用axios。

第一步:

在OpenHarmony標準系統的應用中下載安裝OpenHarmony axios三方組件。

npm install @ohos/axios –save

第二步:

在頁面中,引入axios。

import axios from "@ohos/axios";

第三步:

axios既可以當做函數直接使用發起異步請求,也可以當做對象,使用其get/post方法發起異步請求。

作為函數直接發起post請求,通過promise獲取請求結果。

let url = 'http://www.xxx.xxx';
axios({method: "post"undefinedurl: urlundefineddata:{catalogName: "doc-references"undefinedlanguage: "cn"undefinedobjectId: "js-apis-net-http-0000001168304341"undefined}
}).then(res => {console.info('post result:' + JSON.stringify(res.data.value.breadUrl))}).catch(error => {console.info('post error!')})

作為對象,使用其get/post方法發起異步請求

const test= axios.create({(                         baseURL:'http://xxxx'
});
test.get('/xxxx').then(response=>{})  

axios攔截器

一般在使用axios時,會用到攔截器的功能,一般分為兩種:請求攔截器、響應攔截器。

● 請求攔截器 在請求發送前進行必要操作處理,例如添加統一cookie、請求體加驗證、設置請求頭等,相當于是對每個接口里相同操作的一個封裝;

● 響應攔截器 同理,響應攔截器也是如此功能,只是在請求得到響應之后,對響應體的一些處理,通常是數據統一處理等,也常來判斷登錄失效等。

axios的攔截器作用非常大。axios的攔截器分為請求攔截器跟響應攔截器,都是可以設置多個請求或者響應攔截。每個攔截器都可以設置兩個攔截函數,一個為成功攔截,一個為失敗攔截。在調用axios.request()之后,請求的配置會先進入請求攔截器中,正常可以一直執行成功攔截函數,如果有異常會進入失敗攔截函數,并不會發起請求;調起請求響應返回后,會根據響應信息進入響應成功攔截函數或者響應失敗攔截函數。

舉個例子

1.添加請求攔截器

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

2.添加響應攔截器

axios.interceptors.response.use(function (response) {// 對響應數據做點什么return response;}undefined function (error) {// 對響應錯誤做點什么return Promise.reject(error);});

axios上傳下載文件

使用axios還可以在OpenHarmony中上傳和下載文件,并獲取到上傳和下載的進度。

上傳文件:

import  axios from '@ohos/axios'
import { FormData } from '@ohos/axios'var formData = new FormData()
formData.append('file'undefined 'internal://cache/blue.jpg')// 發送請求
axios.post('http://www.xxx.com/upload'undefined formDataundefined {headers: { 'Content-Type': 'multipart/form-data' }undefinedcontext: getContext(this)undefinedonUploadProgress:(uploadedSize: numberundefined total:number):void=> {console.info(Math.ceil(uploadedSize/total * 100) + '%');}undefined
}).then((res) => {console.info("result" + JSON.stringify(res.data));
}).catch(error => {console.error("error:" + JSON.stringify(error));
})

下載文件:

axios({url: 'http://www.xxx.com/blue.jpg'undefinedmethod: 'get'undefinedcontext: getContext(this)undefinedfilePath: filePath undefinedonDownloadProgress:  (receivedSize: numberundefined total:number):void=> {console.info(Math.ceil( receivedSize/total * 100 ) + '%');}undefined}).then((res)=>{console.info("result: " + JSON.stringify(res.data));}).catch((error)=>{=console.error(t"error:" + JSON.stringify(error));})

除以上特性之外,axios的默認配置,取消請求等特性都是可以在OpenHarmony上繼續使用的哈。另外,從npm官網上,可以看到有8000+的三方組件依賴axios,現在axios支持OpenHarmony后,更多的三方組件也將能在OpenHarmony上跑起來。

如何移植axios到OpenHarmony上運行的?

介紹了這么多axios的用法,相信前端的axios老粉們已經迫不及待地去體驗了吧。但是也許你會好奇,axios為啥能在OpenHarmony上運行?它不只是支持瀏覽器和Nodejs嗎?

這塊深入解讀的話,需要了解axios框架的實現原理。簡單來說,ohos/axios依賴開源社區axios三方組件,并根據axios現有的框架實現了ohadapter,即在OpenHarmony中適配網絡調用,對外暴露axios的原有對象,因此可以保障axios的api及特性都完全繼承。大家可以進一步到openharmony-tpc看下其源碼的實現。

如下圖,右邊藍色的是原生axios的開源社區,左邊綠色的是OpenHarmony axios三方組件,僅僅是實現了一個OpenHarmony的適配模塊,并未修改原生社區的一行代碼。

為了幫助到大家能夠更有效的學習OpenHarmony 開發的內容,下面特別準備了一些相關的參考學習資料:

OpenHarmony 開發環境搭建:https://qr18.cn/CgxrRy

《OpenHarmony源碼解析》:https://qr18.cn/CgxrRy

  • 搭建開發環境
  • Windows 開發環境的搭建
  • Ubuntu 開發環境搭建
  • Linux 與 Windows 之間的文件共享
  • ……

系統架構分析:https://qr18.cn/CgxrRy

  • 構建子系統
  • 啟動流程
  • 子系統
  • 分布式任務調度子系統
  • 分布式通信子系統
  • 驅動子系統
  • ……

OpenHarmony 設備開發學習手冊:https://qr18.cn/CgxrRy

在這里插入圖片描述

OpenHarmony面試題(內含參考答案):https://qr18.cn/CgxrRy

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

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

相關文章

高效寫代碼java-推薦插件1(格式轉化 ConverterX )-日后待更新

ConverterX 主要功能:格式轉化 字符串格式轉換 日期轉換 Json格式轉義 字符格式 快捷鍵 ctrl shiftS Upper(CODEEASE)字符串全部變成大寫Lower(codeease)字符串全部變成小寫Camel(codeEase)字符串變成小駝峰ClassCaemel(CodeEase)字符串變成大駝峰UnderlineUpper(CODE_EAS…

項目管理:Jira,禪道,GitHub Issues對比

Jira、禪道(ZenTao)和GitHub Issues都是項目管理工具,但它們在功能、適用場景和特性上有所不同。以下是它們之間的對比: 功能: Jira:是一款強大的項目管理工具,適用于各種項目,尤其…

Vue3組件間通信通過回調函數傳遞數據

Vue3組件間通信通過回調函數傳遞數據 一、前言1、使用場景2、實現方法1. 父組件中定義回調方法2. 子組件中觸發回調方法 二、結論 一、前言 在 Vue 3 中,組件之間的通信是一個重要的主題。在許多情況下,你可能需要從子組件向父組件傳遞數據或觸發父組件…

python實用系列:按順序重命名文件

啊,好久沒更博客了,今天偶然想換個桌面壁紙,于是上網搜了兩個比較滿意的桌面壁紙,都是壓縮包: 當我想要給他們放到我的桌面壁紙文件里的時候患了難,因為他們的名字有相同的: anime文件夾里邊&a…

揭秘!亞馬遜、Vinted賣家如何借助自養號測評實現爆單?

?作為一名跨境賣家,你一定夢想著能夠在亞馬遜上實現爆單,讓產品火爆銷售。下面就分享五個秘訣,幫助你實現這個夢想: 1. 優質產品:首先,確保你的產品質量優秀,能夠滿足消費者的需求。品質好的產…

基于Matlab使用BP神經網絡進行電力系統短期負荷預測

歡迎大家點贊、收藏、關注、評論啦 ,由于篇幅有限,只展示了部分核心代碼。 文章目錄 一項目簡介 二、功能三、系統四. 總結 一項目簡介 一、項目背景與意義 電力系統的短期負荷預測對于電力調度和能源管理具有至關重要的作用。通過準確地預測電力負荷&…

【產品經理】輸出

引言: ? ? ? ?在最近頻繁的產品管理職位面試中,我深刻體會到了作為產品經理需要的不僅僅是對市場和技術的敏銳洞察,更多的是在復雜多變的環境中,如何運用溝通、領導力和決策能力來引導產品從概念走向市場。這一系列博客將分享…

CAN網絡管理(TJA1145如何實現MCU的休眠喚醒)

節點喚醒方式 本地喚醒: 喚醒源來源于自身模塊,比如常說的KL15,控制器由KL15線供電,即只能在鑰匙置于“ACC”或者“ON”檔時運行軟件和維持CAN通信 對于正在運行的CPU軟件,無論它處在什么狀態,只要Hardwa…

深度學習模型keras第二十五講:使用KerasNLP從零開始預訓練Transformer模型

1、KerasNPL預訓練Transformer模型概念 使用KerasNLP來預訓練一個Transformer模型涉及多個步驟。由于Keras本身并不直接提供NLP的預訓練模型或工具集,我們通常需要結合像TensorFlow Hub、Hugging Face的Transformers庫或自定義的Keras層來實現。 以下是一個簡化的…

Android Baidu地圖SDK只展示藍背景,沒有繪制內容問題解決

背景 項目里接入了Baidu地圖SDK,用于展示信息、選點。 在一個新的Activity中,引入了TextureMapView,用于地圖展示。 選點過程有兩個頁面。 A頁面中有一個不能滑動的地圖,只是用來展示,沒有其他任何操作。 點擊A頁…

Plesk中如何移除之前添加的域名

我這邊想要移除我之前綁定到主機的域名,但是不知道如何在主機上面進行移除,由于我使用的Hostease的Windows虛擬主機產品默認帶普通用戶權限的Plesk面板,但是不知道如何在Plesk上操作移除域名,因為也是對于Hostease主機產品不是很了…

java單元測試:JUnit斷言庫

JUnit斷言庫提供了一組用于驗證測試結果的工具。這些斷言方法幫助開發人員在單元測試中明確表達預期結果,并在實際結果與預期結果不符時報告失敗。 1. JUnit中的斷言 斷言用于驗證測試的預期結果。JUnit 5(Jupiter)提供了一組靜態方法&…

獲取和設置代理的動態IP的方式

引言 大家好,今天我來給大家分享一下如何通過編程技術來獲取和設置代理的動態IP。在網絡世界中,代理和動態IP是非常常見的概念,尤其對于需要大規模訪問網站或者需要隱藏真實IP地址的應用程序來說,更是必不可少的工具。接下來&…

【精品】【算法實戰】每日一題:如何用Python實現給定整數序列中尋找最小長度窗口以包含所有不同元素的算法?

問題: 如何用Python實現給定整數序列中尋找最小長度窗口以包含所有不同元素的算法? 核心思路 核心思路是利用雙端隊列(作為滑動窗口)來找到一個滿足特定條件的最小長度子序列。算法遍歷給定的序列,對于每個新數據點…

【Spring】Spring框架對RESTFul風格的支持

1、簡介 Spring框架對RESTful風格的支持主要體現在Spring MVC和Spring Boot等模塊中。RESTful(Representational State Transfer,表述層資源狀態轉移)是一種軟件架構風格,它強調資源(通常是網絡上的信息)的…

Java方法的基本用法

Java方法的基本用法 前言一、什么是方法方法存在的意義示例 二、方法定義語法基本語法代碼示例注意事項 三、方法調用的執行過程基本規則代碼示例計算兩個整數相加計算 1! 2! 3! 4! 5! 四、實參和形參的關系代碼示例交換兩個整型變量原因分析解決辦法 五、沒有返回值的方法…

初識java——javaSE (6)接口的實現——比較器與深拷貝,淺拷貝

文章目錄 前言一 比較器1.1 關于兩個對象的比較1.2 Comparable接口:1.3 Arrays.sort方法的實現1.4 比較器的實現Comparator接口 二 深拷貝與淺拷貝2.1 淺拷貝:Cloneable接口:clone方法:實現拷貝:淺拷貝: 2.…

Python3 筆記:Python的所有關鍵字

查看Python的關鍵字首先需要用import導入keyword模塊 import keyword # 查看Python的所有關鍵字,先用import導入keyword模塊 print(keyword.kwlist) 運行結果: [False, None, True, and, as, assert, async, await, break, class, continue, def, …

MQ如何保證消息不丟失

MQ如何保證消息不丟失 問題分析具體分析及解決方案RabbitMQ生產者RabbitMQ配置消費者 KafkaKafka配置消費者 問題分析 從Kafka和RabbitMQ進行分析,MQ消息丟失的情況有生產者推送消息時數據丟失,MQ中間件宕機情況下數據丟失,消費者消費時消息…

GoLand map中的并發問題——為什么會造成并發問題?該怎么解決?

GoLand map中的并發問題——為什么會造成并發問題?該怎么解決? 問題提出原因解析具體原因競態檢測器 如何解決并發問題呢?方法一 : 使用sync.Mutex方法二: 使用sync.Map我們首先了解一下sync.Map的常用方法&#xff1a…