v0.1.0 为首个可用版本:以
uni.request为唯一底层依赖、不重造网络栈,把 URL 拼接、header 合并、超时取消、错误收敛这些每次都要重写的重复劳动收进一套 axios 心智的 API。Web / 微信小程序 /
Android 三端编译验证通过,Web 端 15 项真实网络测试矩阵全部通过。
一、为什么做这个库
直接用uni.request写业务,三件事反复发生:
- 重复封装:URL 与 query 拼接、header 合并、超时与取消、失败形态归一——每个项目封装一遍,换个项目再来一遍
- 多端差异:编码行为、失败返回在各端存在差异,逐端排查成本高
- 类型缺位:
uni.request泛回调风格,错误码散落字符串,业务侧只能as any
unix-request 把这些收敛成一套库:写过 axios 的开发者看一眼 API 就能上手;多端发布由库内确定性实现抹平差异;全链路强类型标注。
二、核心能力
请求主入口 + 七种快捷方法
import { request, get, post } from '@/uni_modules/ux-request' // 泛型静态标注 res.data 类型 request<UTSJSONObject>({ url: '/api/http/method/get', method: 'GET' }) // 快捷方法:method 由方法名固定注入(delete 为 UTS 保留字,命名 del) get<UTSJSONObject>('/users', { params: { page: 1 } as UTSJSONObject }) post<UTSJSONObject>('/login', { user: 'demo' } as UTSJSONObject, null)默认实例开箱即用,configureRequest配置全局默认;createRequest(defaults)创建隔离实例(defaults 与拦截器注册表互不影响),心智对标axios.create。
拦截器
请求 / 响应拦截器多枚有序注册、可ejectInterceptor(id)移除;响应错误链支持三条路径——恢复(返回响应)/换错(返回新错误)/放行(返回null),语义对标 axios。
统一可预测的错误结构
RequestError收敛 8 类错误码(ERR_PARAM/ERR_CONFIG/ERR_CANCELED/ERR_TIMEOUT/ERR_NETWORK/ERR_BAD_REQUEST/ERR_BAD_RESPONSE/ERR_NATIVE),原生errCode经nativeErrCode
原值透传不翻译,config与response原文挂载——4xx/5xx 响应体不丢失。
确定性 URL 与参数处理
baseURL自动拼接(http(s) 开头原样使用)、params与 url 既有 query 合并后由库内统一编码(encodeURIComponent+ JSON 序列化兜底)、GET/HEAD 的UTSJSONObject
请求体自动并入 query、header 三级浅合并(内置默认 → 实例默认 → 请求级)。
请求取消
import { createCancelSource } from '@/uni_modules/ux-request' const source = createCancelSource() request<UTSJSONObject>({ url: '/heavy', cancelToken: source.token }) // 离开页面时: source.cancel('page unloaded') // 确定性 abort,请求以 ERR_CANCELED reject逃生舱
onTask透出原生RequestTask(chunked 分块监听等高级场景);enableQuic/sslVerify/withCredentials/enableChunked等原生能力参数全量透传不抹平。
三、平台支持现状
| 平台 | 状态 |
|---|---|
| Web | ✅ 编译产物验证,15 项真实网络测试矩阵全部通过 |
| 微信小程序 | ✅ 产物验证通过;15 项矩阵待开发者工具人工实测 |
| Android | ✅ 云打包 release 编译零错误;真机矩阵待真机验证 |
| iOS / 鸿蒙 | ⏳ 代码已适配,受环境限制暂未实测(iOS 需 macOS、鸿蒙需 DevEco Studio) |
四、快速上手
pnpmadd@meng-xi/unix-requestmkdir-puni_modules&&cp-Rnode_modules/@meng-xi/unix-request uni_modules/ux-requestimport { request, configureRequest } from '@/uni_modules/ux-request' import type { RequestError } from '@/uni_modules/ux-request' configureRequest({ baseURL: 'https://your.api', timeout: 10000, header: null, validateStatus: null // null 表示沿用内置默认(2xx) }) request<UTSJSONObject>({ url: '/api/http/method/get' }).then((res) => { console.log('statusCode=' + res.statusCode.toString()) }).catch((err) => { const e = err as RequestError console.log(e.code, e.errMsg) })不想搭工程?安卓真机可直接下载体验 App:下载体验 App(APK)——上述示例工程的云打包产物,安装后即可在真机运行全部用例。
五、文档与资源
- 📖 完整文档(指南 15 篇 + API 16 篇,中英双语)
- 📝 更新日志
六、交流与关注
想了解设计思路与实现原理(UTS 泛型跨端、错误体系收敛、取消的确定性 abort 等)?公众号「梦曦工作室」有系列解析,扫码关注:
相关链接
- 示例工程 packages/playground(11 个功能页验证矩阵,三端可跑)
- API 参考
欢迎反馈与共建:GitHub