【鸿蒙优选三方库】@ohos/axios:前端转鸿蒙,网络层几乎不用改

鸿蒙原生的 @ohos.net.http 没有 Promise、没有拦截器,鉴权和错误处理要在每个请求里重写一遍。@ohos/axios 把大家熟悉的 Axios 原样搬了过来——API 一致,改个 import 就能跑。

📦 仓库地址 | ohpm install @ohos/axios | v2.2.13 | MIT


它解决什么问题

写过前端的人都知道 axios 有多顺手:.then().catch() 链式调用、拦截器统一加 Token、FormData 上传、AbortController 取消请求。

到了鸿蒙,这些全要重新造:回调嵌套、每个请求手写 header、文件上传下载自己拼流。老项目迁移过来,网络层几乎等于重写。

@ohos/axios 在底层封装 @ohos.net.http,对外暴露原汁原味的 Axios API。前端经验直接复用。


核心能力

能力说明
Promise API告别回调地狱
请求/响应拦截器鉴权、日志、错误兜底统一处理
泛型支持ArkTS 下显式指定返回类型,类型安全
上传下载FormData、URI、ArrayBuffer、断点续传
进度回调v2.2.13 起普通 GET/POST 也能监听进度
取消请求AbortController
企业级安全自定义 CA、双向 mTLS、国密 SSL、证书锁定
性能计时performanceTiming 给出 DNS/TCP/TLS 各阶段耗时

30 秒上手

ArkTS 不支持隐式 any,调用时显式指定泛型即可:

import axios, { AxiosResponse, AxiosError } from '@ohos/axios'

interface UserInfo { id: number; name: string }

// 拦截器统一加 Token,一次配置全局生效
axios.interceptors.request.use((config) => {
  config.headers['Authorization'] = 'Bearer ' + getToken()
  return config
})

axios.get<UserInfo, AxiosResponse<UserInfo>, null>('/user?ID=12345')
  .then((res: AxiosResponse<UserInfo>) => console.info(res.data.name))
  .catch((err: AxiosError) => console.error(err.message))

三个泛型参数:T 是 response.data 的类型,R 是完整响应类型,D 是请求体类型(GET 传 null)。

下载文件带进度:

axios({
  url: 'https://example.com/photo.jpg',
  method: 'get',
  filePath: getContext(this).cacheDir + '/photo.jpg',
  onDownloadProgress: (e) => {
    console.info(`${Math.ceil(e.loaded / e.total * 100)}%`)
  },
})

社区已解决的典型问题

升级后 getUri(config) 报错(#464 / #467)
拦截器返回的 config 传入 getUri 时触发日志打印逻辑异常。已在 #466 修复。升级后建议对 getUri 做一轮冒烟测试。

安全漏洞(#462)
用户报告新漏洞,已修复 CVE-2026-67314、CVE-2026-67315、CVE-2026-67318。仓库有专门的 CVE 响应流程。

普通请求想要进度回调(#460)
此前只有文件上传下载支持进度。v2.2.13 起,设了进度回调的请求自动切到流式模式,GET/POST 都能监听。注意此时 performanceTiming 为 undefined,两者不可兼得。


适合谁用

  • 从 Web/RN 迁移到鸿蒙:网络层几乎平移
  • 中后台应用:拦截器统一处理 Token 刷新、401 跳登录
  • 有上传下载需求:图床、附件、断点续传开箱即用
  • 金融政企:mTLS、国密 SSL、证书锁定一条龙
  • 前端转鸿蒙的开发者:零学习成本

451 个 Issue 已关闭。遇到怪问题先去 Issue 列表 搜一下,大概率有人踩过。

Logo

作为“人工智能6S店”的官方数字引擎,为AI开发者与企业提供一个覆盖软硬件全栈、一站式门户。

更多推荐