写点什么

网络组件 axios 可以在 OpenHarmony 上使用了

  • 2022 年 8 月 29 日
    上海
  • 本文字数:2901 字

    阅读完需:约 10 分钟

网络组件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
复制代码


OpenHarmony npm 环境配置等更多内容,参考安装教程 如何安装 OpenHarmony npm 包。

https://gitee.com/openharmony-tpc/docs/blob/master/OpenHarmony_npm_usage.md


第二步:

在页面中,引入 axios。


import axios from "@ohos/axios";
复制代码


第三步:

axios 既可以当做函数直接使用发起异步请求,也可以当做对象,使用其 get/post 方法发起异步请求。

作为函数直接发起 post 请求,通过 promise 获取请求结果。


    let url = 'http://www.xxx.xxx';    axios({      method: "post"undefined      url: urlundefined      data:{        catalogName: "doc-references"undefined        language: "cn"undefined        objectId: "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' }undefined context: getContext(this)undefined onUploadProgress:(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'undefined   method: 'get'undefined   context: getContext(this)undefined   filePath: filePath undefined   onDownloadProgress:  (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 API9 的 axios 组件就为大家介绍到这,其源码已开源在了“https://gitee.com/openharmony-sig/axios”,欢迎大家使用和提 Issue。了解更多三方组件动态,请关注三方组件资源汇总,更多优秀的组件等你来发现!



用户头像

OpenHarmony开发者官方账号 2021.12.15 加入

OpenHarmony是由开放原子开源基金会(OpenAtom Foundation)孵化及运营的开源项目,目标是面向全场景、全连接、全智能时代,基于开源的方式,搭建一个智能终端设备操作系统的框架和平台,促进万物互联产业的繁荣发展

评论

发布
暂无评论
网络组件axios可以在OpenHarmony上使用了_Open Harmony_OpenHarmony开发者社区_InfoQ写作社区