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) |
四、快速上手
pnpm add @meng-xi/unix-request
mkdir -p uni_modules && cp -R node_modules/@meng-xi/unix-request uni_modules/ux-request
import { 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)——上述示例工程的云打包产物,安装后即可在真机运行全部用例。
五、文档与资源
六、交流与关注
想了解设计思路与实现原理(UTS 泛型跨端、错误体系收敛、取消的确定性 abort 等)?公众号「梦曦工作室」有系列解析,扫码关注:
相关链接
- 示例工程 packages/playground(11 个功能页验证矩阵,三端可跑)
- API 参考
欢迎反馈与共建:GitHub