【疑难杂症】 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.rhkb.cn/news/498016.html

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

相关文章

芊芊手印网站

据说25年是佛灯火&#xff08;木火之年&#xff09;&#xff0c;财运之年 芊芊手印网站链接&#xff1a;芊芊手印-手相纹理素描线稿提取工具

“Gold-YOLO:基于聚合与分发机制的高效目标检测新范式”

&#x1f3e1;作者主页&#xff1a;点击&#xff01; &#x1f916;编程探索专栏&#xff1a;点击&#xff01; ⏰️创作时间&#xff1a;2024年12月26日8点00分 神秘男子影, 秘而不宣藏。 泣意深不见, 男子自持重, 子夜独自沉。 论文源地址&#xff08;有视频&#xf…

工厂+策略模式之最佳实践(疾病报卡维护模块API设计)

目录 &#x1f4bb;业务场景 &#x1f527;应用技术 ⚙概要流程 ❗开发注意 服务类上标注了 自定义注解 却无法直接利用getDeclaredAnnotation 获取 *Spring代理机制 代理机制的工作原理 代理的工作机制 代理的使用场景 已获取EmrXXXServiceImpl 的Class&#xff0c;如…

Linux驱动开发 IIC I2C驱动 编写APP访问EEPROM AT24C02

在嵌入式开发中&#xff0c;I2C&#xff08;Inter-Integrated Circuit&#xff09;是一种常用的串行通信协议&#xff0c;广泛应用于与外设&#xff08;如 EEPROM、传感器、显示屏等&#xff09;进行数据交换。AT24C02 是一种常见的 I2C EEPROM 存储器&#xff0c;它提供 2Kbit…

闭包的理解

什么是闭包 在函数内层的作用域中访问函数外层的作用域中的变量&#xff0c;就形成了一个闭包&#xff0c;闭包会使其私有变量的生命周期得到提升至与外层作用域一致。 闭包特性&#xff1a; 1.拥有私有变量 2. 延长私有变量的生命周期 一般函数中的变量在函数被执行完成之…

实景三维点云处理专业软件ArcGIS根据DSM生成地表点云集

常见的实景三维处理软件及其特色功能如下&#xff1a; 一、专业实景三维建模软件 Agisoft Metashape 高精度建模&#xff1a;能够生成高精度的三维模型&#xff0c;精度可以达到厘米级甚至毫米级&#xff0c;适用于需要详细测量和分析的项目&#xff0c;如文物保护和建筑测量。…

计算机网络-L2TP Over IPSec基础实验

一、概述 上次我们进行了标准L2TP的配置&#xff0c;但是在最后我们在进行业务流量访问时看到流量是没有进行加密的&#xff0c;这就导致可能得安全风险&#xff0c;所以这里其实可以退像GRE那样调用IPSec框架来进行加密保护。 拓扑 数据不加密 现在需要配置IPSec&#xff0c;然…

怎么在VMware Workstation上安装Win11虚拟机?

Windows11虚拟机是免费的吗&#xff1f; Windows 11 虚拟机本身并不是免费的。你需要一个合法的 Windows 11 许可证才能在虚拟机中运行。不过&#xff0c;许多虚拟机软件&#xff08;如 VirtualBox 和 VMware Workstation Player&#xff09;本身是免费的&#xff0c;允许你创…

时间敏感网络中全面分析与调度的模型驱动方法

论文&#xff1a;A Model-Driven Approach for the Comprehensive Analysis and Scheduling in Time-Sensitive Networks》 背景与动机 TSN 的发展与应用领域&#xff1a;自 2012 年起&#xff0c;IEEE 802.1 TSN 任务组致力于开发通信标准&#xff0c;增强 IEEE 802 网络&…

重生之我在异世界学编程之数据结构与算法:深入队列篇

大家好&#xff0c;这里是小编的博客频道 小编的博客&#xff1a;就爱学编程 很高兴在CSDN这个大家庭与大家相识&#xff0c;希望能在这里与大家共同进步&#xff0c;共同收获更好的自己&#xff01;&#xff01;&#xff01; 目录 一、概述二、链表节点结构三、队列结构四、基…

SpringCloudAlibaba技术栈-Dubbo

1、什么是Dubbo? 简单来说&#xff0c;dubbo就像是个看不见的手&#xff0c;负责专门从注册中心nacos调用注册到nacos上面的服务的&#xff0c;因为在微服务环境下不同的功能模块可能在不同的服务器上。dubbo调用服务就像是在调用本地的服务一样。 分布式调用与高并发处理 Du…

智慧城市超声波气象站

智慧城市超声波气象站是一种现代化的气象监测设备&#xff0c;它利用超声波技术能够实时、精确地监测和记录多种关键气象要素。以下是智慧城市超声波气象站的主要功能&#xff1a; 一、高精度气象监测 风速风向测量&#xff1a;超声波气象站的核心部件是超声波风速风向仪&…

时间关系推理:利用大型语言模型检测股票投资组合崩溃

“Temporal Relational Reasoning of Large Language Models for Detecting Stock Portfolio Crashes” 论文地址&#xff1a;https://arxiv.org/pdf/2410.17266 摘要 当股票投资组合遭遇如2007年金融危机或2020年因COVID-19导致的股市暴跌这样的罕见事件时&#xff0c;传统的…

IndexOf Apache Web For Liunx索引服务器部署及应用

Apache HTTP Server 是一款广泛使用的开源网页服务器软件,它支持多种协议,包括 HTTP、HTTPS、FTP 等 IndexOf 功能通常指的是在一个目录中自动生成一个索引页面的能力,这个页面会列出该目录下所有的文件和子目录。比如网上经常看到的下图展现的效果,那么接下来我们就讲一下…

【C++】BC89 包含数字9的数

博客主页&#xff1a; [小ᶻ☡꙳ᵃⁱᵍᶜ꙳] 本文专栏: C 文章目录 &#x1f4af;前言&#x1f4af;题目描述题目名称&#xff1a;BC89 包含数字9的数 &#x1f4af;代码实现与分析代码结构详解 &#x1f4af;代码执行逻辑示例&#x1f4af;优化与改进改进版代码改进点详解…

解决Windows无法同时使用有线网和无线网WIFI的问题

参考资料 电脑无线网wifi和有线网同时使用&#xff08;内网外网同时使用&#xff09;用route命令解决Wifi和网卡不能同时上内外网问题 解决方法 对于Windows系统同时连接有线网和无线网Wifi时&#xff0c;只会有一个网关生效&#xff0c;因此我们需要手动通过route命令设置网…

2025常见的软件测试面试题

&#x1f345; 点击文末小卡片&#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 “ 今天我给大家介绍一些python自动化测试中常见的面试题&#xff0c;涵盖了Python基础、测试框架、测试工具、测试方法等方面的内容&#xff0c;希望能够帮助…

uni.getLocation+百度地图,报错getLocation:fail translate coordinate system faild

问题描述&#xff1a; 经测验&#xff0c;在type传入gcj02时才会报错&#xff0c;要使用gcj02就要配置地图key&#xff0c;没配置&#xff0c;uni.getLocation就会忽略type参数。 当key配置的是百度地图时type传入gcj02会报错。 还有就是不能在谷歌浏览器使用&#xff0c;不然调…

SickOs1.1

下载安装 名称&#xff1a;SickOs&#xff1a;1.1 发布日期&#xff1a;2015 年 12 月 11 日作者: D4rk系列&#xff1a;SickOs sick0s1.1.7z&#xff08;大小&#xff1a;623 MB&#xff09;下载&#xff08;镜像&#xff09;&#xff1a; https: //download.vulnhub.com/sick…