【疑难杂症】 HarmonyOS NEXT中Axios库的响应拦截器无法拦截424状态码怎么办?

今天在开发一个HarmonyOS NEXT的应用的时候,发现http接口如果返回的状态码是424时,我在axios中定义的拦截器失效了。直接走到了业务调用的catch中。

问题表现:

我的拦截器代码如下:

解决办法:

先说解决办法,在拦截器的instance对象上,添加如下代码即可解决。赶时间的朋友,复制一下代码即可搞定。不赶时间的朋友请继续往下看。

instance.defaults.validateStatus = (status) => {return status >= 200 && status < 500;
}

为什么会这样:

一开始怀疑是我的拦截器写的有问题。但是我换了一个可以返回200状态码的接口,拦截器又生效了。这勾起了我的好奇心。

居然还有这么诡异的问题。必须盘它!

这里鸿七公给大家分享一个通用的解决问题的思路。

遇到问题时,先用正常的case测试下,尽可能的在正常和异常的case之间发现这个问题的规律。实在没辙的时候,就用我们的看家本领——查看堆栈

在DevEco中,有个比较方便的功能,就是出问题的时候,我们可以快速的复制堆栈信息。

将复制出来的堆栈信息,找个编辑器(VS Code或其他的)粘贴下来:

于是我们发现了,报出这个AxiosError的触发位置是在oh_modules/.ohpm/@ohos+axios@2.2.0/oh_modules/@ohos/axios/src/main/ets/components/lib/core/settle.js   文件的第19行

于是我们打开这个文件。在DevEco中使用快捷键Ctrl+N。唤出文件快速搜索框。输出文件名关键字,如下图:

这时就看到了Axios的源码,先不慌,Axios的源码超简单。

找到第19行,确实有reject出一个AxiosError。再往上看,是因为没有满足if条件。而没有满足if条件是因为没有满足validateStatus的调用。

此时我们在第16行打个断点,再次触发一些http的调用。会发现断点会走到这里。然后点击DevEco的调试工具的步进按钮。或者按下快捷键F7。

此时DevEco会跳转到这个函数的定义处。

看到这里大家是不是都明白了,原因就是因为axios默认拦截的状态是在200-299之间。

那为什么axios默认只拦截了200-299的状态码呢?

这个涉及到了http协议相关的知识了,http协议中规定

状态码按数字范围分类,这些代码的每个类都有相同的基本含义。

  • 范围 100-199 分类为“信息”。
  • 200-299 为“成功”。
  • 300-399 为“重定向”。
  • 400-499 为“客户机错误”。
  • 500-599 为“服务器错误”。

所以axios只拦截200-299是没问题的。但是axios也提供了自定义 validateStatus函数的方法,如果我们定义了validateStatus函数,axios则会调用我们提供的validateStatus函数,这样我们就可以去修改axios的行为,达到我们想要的效果了。

instance.defaults.validateStatus = (status) => {return status >= 200 && status < 500;
}

关于鸿七公


    鸿七公拥有12+年的软件开发经验,一直专注于大前端领域,对原生APP开发、混合APP开发和鸿蒙APP开发都有较深入的研究,曾使用cordova、uni-app、React-Native、Flutter做过大量的项目,现在开始研究鸿蒙应用开发,擅长对APP开发的相关知识深入浅出。关注我,带你快速、扎实的学习鸿蒙应用开发。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/65537.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

一起来看--红黑树

【欢迎关注编码小哥&#xff0c;学习更多实用的编程方法和技巧】 红黑树是一种自平衡的二叉搜索树&#xff0c;广泛应用于计算机科学中&#xff0c;尤其是在实现关联数组和集合时。它的设计旨在确保在最坏情况下&#xff0c;基本动态集合操作&#xff08;如插入、删除和查找&am…

聚类评价指标

聚类评价指标分为 内部指标 和 外部指标 两大类&#xff0c;用于评估聚类算法的性能。 一、内部评价指标 内部评价指标不依赖真实标签&#xff0c;主要通过聚类结果本身的紧凑性和分离性进行评估。 轮廓系数&#xff08;Silhouette Coefficient, SC&#xff09; 衡量数据点与其…

flask后端开发(1):第一个Flask项目

目录 一、Helloworddebug、host、port的配置 gitcode地址&#xff1a; https://gitcode.com/qq_43920838/flask_project.git 一、Helloword 一般是会创建两个文件夹和app.py app.py from flask import FlaskappFlask(__name__)app.route(/) def hello_world():return Hello…

C++ 设计模式:抽象工厂(Abstract Factory)

链接&#xff1a;C 设计模式 链接&#xff1a;C 设计模式 - 工厂方法 链接&#xff1a;C 设计模式 - 原型模式 链接&#xff1a;C 设计模式 - 建造者模式 抽象工厂&#xff08;Abstract Factory&#xff09;是一种创建型设计模式&#xff0c;它提供一个接口&#xff0c;用于创…

docker 安装与配置 gitlab

前提条件 Docker&#xff1a;确保你已经安装了 Docker 和 Docker Compose。可以通过以下命令来检查是否安装 Docker&#xff1a;docker --version1. 拉取 GitLab Docker 镜像 首先&#xff0c;我们需要拉取 GitLab 的官方 Docker 镜像。可以使用以下命令来获取 GitLab CE&…

C语言-详细讲解-字符串加密

1.题目要求 编写加密程序&#xff0c;将用户输入的一个英文句子加密为加密字符串&#xff0c;然后输出加密字符串。假设句子长度不超过50个字符。根据给定的句子加密函数原型SentenceEncoding&#xff0c;编写函数SentenceEncoding调用字符加密函数CharEncoding完成句子加密。然…

stratovirt

title: 探索 Stratovirt&#xff1a;云时代的虚拟化新力量 date: ‘2024-12-29’ category: blog tags: Stratovirt云计算虚拟化技术技术解析 sig: Stratovirt archives: ‘2024-12’ author:way_back summary: Stratovirt 作为新兴的虚拟化技术&#xff0c;以其独特的架构和先…

一文复盘:RAG技术-大模型

原文&#xff1a;https://zhuanlan.zhihu.com/p/13962398269 RAG&#xff08;Retrieval-Augmented Generation&#xff09;之所以被关注&#xff0c;有两方面原因&#xff1a; 1、没有跑大模型的资源&#xff1a;大多数人没有GPU集群搞LLM的预训练。 2、大模型缺乏知识&…

使用 OpenCV 绘制线条和矩形

OpenCV 是一个功能强大的计算机视觉库&#xff0c;它不仅提供了丰富的图像处理功能&#xff0c;还支持图像的绘制。绘制简单的几何图形&#xff08;如线条和矩形&#xff09;是 OpenCV 中常见的操作。在本篇文章中&#xff0c;我们将介绍如何使用 OpenCV 在图像上绘制线条和矩形…

WinForm 美化秘籍:轻松实现 Panel 圆角虚线边框

文章目录 1、引言2、案例实现1、创建自定义 Panel 类2、定义圆角矩形3. 使用自定义 Panel4. 调整属性5、使用背景图片来实现5、拓展&#xff1a;使用 Panel 的 Paint重绘单独实现虚线边框效果 3、实现效果4、总结 1、引言 在 Winform 应用程序开发中&#xff0c;美化用户界面&…

Spring Cloud LoadBalancer (负载均衡)

目录 什么是负载均衡 服务端负载均衡 客户端负载均衡 Spring Cloud LoadBalancer快速上手 启动多个product-service实例 测试负载均衡 负载均衡策略 自定义负载均衡策略 什么是负载均衡 负载均衡(Load Balance&#xff0c;简称 LB) , 是高并发, 高可用系统必不可少的关…

OpenCloudOS简介

OpenCloudOS是一款开源的云操作系统&#xff0c;具有诸多特性和优势&#xff0c;广泛应用于多个领域。 一、项目背景 开源社区发起&#xff1a;由操作系统、云平台、软硬件厂商与个人共同倡议发起的操作系统社区项目&#xff0c;旨在打造全面中立、开放、安全、稳定易用、高…

NLP 中文拼写检测纠正论文 Automatic-Corpus-Generation

拼写纠正系列 NLP 中文拼写检测实现思路 NLP 中文拼写检测纠正算法整理 NLP 英文拼写算法&#xff0c;如果提升 100W 倍的性能&#xff1f; NLP 中文拼写检测纠正 Paper java 实现中英文拼写检查和错误纠正&#xff1f;可我只会写 CRUD 啊&#xff01; 一个提升英文单词拼…

区块链安全常见的攻击合约和简单复现,附带详细分析——不安全调用漏洞 (Unsafe Call Vulnerability)【6】

区块链安全常见的攻击分析——不安全调用漏洞 Unsafe Call Vulnerability 区块链安全常见的攻击合约和简单复现&#xff0c;附带详细分析——不安全调用漏洞 (Unsafe Call Vulnerability)【6】1.1 漏洞合约1.2 漏洞分析1.3 攻击步骤分析1.4 攻击合约 区块链安全常见的攻击合约和…

生成excel文件(有备注和表头的情况)

要使用 Java 导出 Excel 文件&#xff0c;并且通过 ExcelProperty 注解进行列的映射&#xff0c;可以利用 EasyExcel 库。EasyExcel 是阿里巴巴开源的一款高性能 Excel 读写工具&#xff0c;它支持通过注解将类与 Excel 的列进行映射&#xff0c;简化了 Excel 操作的复杂性。 …

Excel 面试 01 “Highlight in red the 10 lowest orders”

要在 Excel 中完成“Highlight in red the 10 lowest orders”的任务&#xff0c;可以使用条件格式&#xff08;Conditional Formatting&#xff09;。以下是详细步骤&#xff1a; 步骤 1&#xff1a;选择数据范围 打开包含订单数据的工作表。选中包含订单金额或数量的单元格范…

留学生交流互动系统|Java|SSM|VUE| 前后端分离

【技术栈】 1⃣️&#xff1a;架构: B/S、MVC 2⃣️&#xff1a;系统环境&#xff1a;Windowsh/Mac 3⃣️&#xff1a;开发环境&#xff1a;IDEA、JDK1.8、Maven、Mysql5.7 4⃣️&#xff1a;技术栈&#xff1a;Java、Mysql、SSM、Mybatis-Plus、VUE、jquery,html 5⃣️数据库可…

Junit如何禁用指定测试类,及使用场景

在JUnit中禁用指定测试类可以通过多种方式实现&#xff0c;具体取决于使用的JUnit版本&#xff08;JUnit 4 或 JUnit 5&#xff09;。以下是针对两个版本的详细说明以及它们可能的使用场景&#xff1a; JUnit 4 禁用整个测试类 可以使用Ignore注解来忽略整个测试类。这将导致…

算法基础一:冒泡排序

一、冒泡排序 1、定义 冒泡排序&#xff08;英语&#xff1a;Bubble Sort&#xff09;是一种简单的排序算法。它重复地走访过要排序的数列&#xff0c;一次比较两个元素&#xff0c;如果他们的顺序&#xff08;如从大到小、首字母从A到Z&#xff09;错误就把他们交换过来。 …

Spark大数据开发与应用案例(视频教学版)(一)

作者&#xff1a;余辉 简介&#xff1a;余辉&#xff0c;硕士毕业于中科院&#xff0c;从事IT行业12年。专注于大数据和机器学习。在数据团队担任过的角色&#xff1a;研发、架构师、负责人、讲师。数据知识产权&#xff1a;出版大数据书籍【1】本&#xff0c;论文【2】篇&…