尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

037-axios网络请求封装

037-axios网络请求封装
📅 发布时间:2026/7/21 17:17:38

037 — @ohos/axios 网络请求封装:构建可复用的 HTTP 客户端

简介

在鸿蒙应用开发中,网络请求是连接客户端与服务端的核心桥梁。MoneyTrack 项目基于@ohos/axios库,通过单例模式封装了一个高度可复用的 HTTP 客户端,统一管理 baseURL、超时配置、请求/响应拦截器等关键能力。这套封装不仅减少了重复代码,更通过拦截器机制实现了全局错误处理、Token 注入、超时重试和日志打点,为上层 33+ 个 API 端点提供了稳定、一致的网络通信基础。

核心知识点

1. Axios 实例创建与全局配置

通过axios.create()创建自定义实例,集中管理全局配置,避免每个请求单独拼写:

  • baseURL:统一设置服务端地址,支持通过环境变量切换 dev/prod 环境。
  • 超时设置(30000ms):30 秒超时阈值,平衡用户体验与网络等待。配合超时重试机制,进一步提升弱网下的请求成功率。
  • 请求头默认值:统一设置Content-Type: application/json、Accept等通用头部。
constinstance=axios.create({baseURL:ApiConfig.getBaseUrl(),// 环境切换:dev/prodtimeout:30000,headers:{'Content-Type':'application/json'}});

2. 拦截器机制

拦截器是 Axios 最强大的扩展点。MoneyTrack 使用多个拦截器实现关注点分离,多个请求拦截器按注册顺序先注册先执行,多个响应拦截器按注册顺序先注册后执行。

请求拦截器链路:请求拦截器①(Token注入)→ 请求拦截器②(日志打点)→ 发送网络请求 → 响应拦截器①(状态码解析)→ 响应拦截器②(错误分类处理)

请求拦截器:注入 Token + 日志打点
// 请求拦截器① — Token 注入instance.interceptors.request.use((config)=>{consttoken=AppStorage.get<string>('token');if(token){config.headers.Authorization=`Bearer${token}`;}returnconfig;},(error)=>Promise.reject(error));// 请求拦截器② — 日志打点instance.interceptors.request.use((config)=>{console.info(`[Network]${config.method?.toUpperCase()}${config.url}`);returnconfig;},(error)=>Promise.reject(error));
响应拦截器:解析 data + 错误分类处理
// 响应拦截器① — 状态码校验instance.interceptors.response.use((response:AxiosResponse)=>{if(response.status===200){returnPromise.resolve(response.data);}Logger.error('[Network]',`请求失败:${response.config.url}`,JSON.stringify(response.status));returnPromise.reject(response);},(error:BusinessError)=>{// 错误分类处理if(error.code==='ECONNABORTED'){// 超时错误returnhandleTimeoutRetry(error);}elseif(!error.response){// 断网错误ReminderUtil.showToast('网络异常,请检查网络连接');}Logger.error('[Network]',`请求失败:`,JSON.stringify(error));returnPromise.reject(error);});

3. 超时重试机制

对于超时或可恢复的网络错误,采用"最大重试次数 + 固定延迟"的策略自动重试:

asyncfunctionhandleTimeoutRetry(error:BusinessError,retryCount=3):Promise<any>{constconfig=error.config;if(!config||!config._retryCount){config._retryCount=0;}if(config._retryCount<retryCount){config._retryCount++;console.info(`[Network] 第${config._retryCount}次重试:${config.url}`);returnnewPromise((resolve)=>setTimeout(resolve,1000)).then(()=>instance.request(config));}returnPromise.reject(error);}

4. 环境切换

通过ApiConfig模块根据构建标识自动切换 baseURL,实现一套代码多环境部署:

exportclassApiConfig{staticgetBaseUrl():string{if(process.env.NODE_ENV==='production'){return'https://api.moneytrack.com';}return'https://dev-api.moneytrack.com';}}

请求拦截→发送→响应拦截完整链路

响应拦截器②错误分类处理响应拦截器①状态码解析后端服务Axios 发送请求请求拦截器②日志打点请求拦截器①Token 注入应用层 API响应拦截器②错误分类处理响应拦截器①状态码解析后端服务Axios 发送请求请求拦截器②日志打点请求拦截器①Token 注入应用层 APIalt[成功][失败]发起请求读取 Token 并注入 Header传递 config打印请求日志发送 HTTP 请求网络传输返回响应接收响应校验 status === 200传递 response.data返回业务数据传递错误分类处理(超时/断网/业务错误)Promise.reject

最佳实践

  1. Token 过期自动刷新:在响应拦截器中捕获 401 状态码,尝试调用刷新 Token 接口,成功后重放原始请求队列。
  2. 断网兜底:在网络不可用时,将请求暂存到离线队列,配合网络状态监听(见 041 篇)在网络恢复后自动重发。
  3. 拦截器顺序:多个请求拦截器按注册顺序依次执行;多个响应拦截器按注册顺序反向执行。需要先注入 Token 再打日志,因此 Token 拦截器先注册。
  4. 请求取消:使用axios.CancelToken或AbortController,在页面离开时取消未完成的请求,避免内存泄漏。

推荐参考文档

  • @ohos/axios API 参考
  • Axios 官方文档

相关新闻

  • 黑苹果终极简化指南:15分钟用OpCore-Simplify完成OpenCore EFI配置
  • 2026年7月最新:天梭广州官方客户服务热线及网点地址,售后维修一站式指南 - 天梭服务中心
  • 对比分析:distilgpt2 MLX vs 原版GPT-2的性能与效率全面评测

最新新闻

  • mpv家用车型推荐:2027款格瑞维亚座椅舒适度解析 - 资讯速览
  • 小程序毕设项目:基于SpringBoot的学生选课报名、课表查看一体化小程序 高校教务线上选课数字化管理系统 移动端校园选课与教师课程管理平台 (源码+文档,讲解、调试运行,定制等)
  • 2026苏州黄金回收新规解读!6区48家正规门店盘点,0损耗透明报价上门回收攻略 - 企业家观察员
  • 武汉智工职业技术学校王牌招生专业详解 附 2026 完整招生简章 - 武汉中职最新信息发布
  • 2026毓典奢品汇北京江诗丹顿回收避坑指南|纵横四海传袭系列行情 顶奢腕表高价变现攻略 - 二奢行情速报
  • 内存泄漏系列专题分析之三十一:Camx进程dumpsys meminfo Unknown部分内存拆解

日新闻

  • Python开发内部工具:7大核心库实战解析
  • 合肥雷达官方2026年7月最新信息:客户服务网点地址与售后热线权威公示 - 亨得利官方服务中心
  • PCA实战指南:从变量纠缠诊断到主成分业务解读

周新闻

  • SaaS软件行业GEO实践:AI搜索时代的品牌可见性与获客新路径
  • 什么是PCTFE?医药高端包装的“防潮王牌“材料
  • 【JVM调优实战】16-可视化利器-JConsole-VisualVM-JMC

月新闻

  • 2026年6月公司网站搭建最新热门渠道测评:四大低成本/零代码平台对比+避坑
  • 【Linux】Linux arm 编译QT程序,出现expected “}“报错
  • 【MATLAB例程】四基站二维AOA定位与距离辅助增强对比仿真。基于角度观测和测距修正的固定目标平面定位精度分析

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号