目录

  • 一、简介
  • 二、安装与配置
  • 三、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;可同步在预览界面中触发内容…