@core 基础设施
@skyroc/axios
类型安全的 Axios 封装,支持重试、transform 流水线、abort 控制
概览
| 项 | 值 |
|---|---|
| 包名 | @skyroc/axios |
| 版本 | 2.0.1 |
| 依赖 | @skyroc/utils、axios、axios-retry、qs |
| 测试 | ✅ 5 个测试文件(含 MSW) |
@skyroc/axios 是底层 HTTP 客户端工厂。它本身不依赖任何 UI / 认证实现——上层 @skyroc/service 在它之上注入适配器,应用再用 service。
两种请求风格
import { createRequest, createFlatRequest } from '@skyroc/axios';| 工厂 | 返回风格 | 适用 |
|---|---|---|
createRequest | 直接返回数据,失败抛异常 | try/catch 风格 |
createFlatRequest | 返回 { data, error, response } | 不想 try/catch,类 Go 风格 |
// flat 风格
const request = createFlatRequest(axiosConfig, options);
const { data, error } = await request({ url: '/users' });
if (error) { /* 处理 */ }请求选项(RequestOption)
工厂第二个参数是一组钩子,构成响应处理流水线:
| 钩子 | 作用 |
|---|---|
onRequest | 请求发出前修改 config(如加 token) |
isBackendSuccess | 判断后端响应是否业务成功 |
onBackendFail | 业务失败时处理(如刷新 token) |
transform | 把后端响应转成业务数据 |
onError | 统一错误处理 |
内建能力
- 请求 ID:每个请求注入
X-Request-Id(常量REQUEST_ID_KEY),便于追踪; - 重试:集成 axios-retry(默认 0 次,可配);
- Abort 控制:内部维护 AbortController 映射,可取消请求;
- 响应 transform:自动把 blob / arrayBuffer 响应转 JSON(
shared.ts); - HTTP 成功判定:
isHttpSuccess判断 2xx。
常量
| 常量 | 值 | 含义 |
|---|---|---|
BACKEND_ERROR_CODE | 'BACKEND_ERROR' | 后端业务错误标识 |
REQUEST_ID_KEY | 'X-Request-Id' | 请求 ID header |
与 TanStack Query 配合
推荐 axios 只负责「发请求 + 拦截」,缓存与生命周期交给 React Query。这正是 @skyroc/service 做的事——它把 createRequest 与 createQueryClient 组合起来,并通过适配器接入 UI。
类型
RequestInstance、FlatRequestInstance、RequestOption、CustomAxiosRequestConfig、FlatResponseData 等,以及重导出的 AxiosError、CreateAxiosDefaults。