Appearance
Axios 请求
ts
import { AxiosHttpClient } from '@axewo/fin-core/http/axios'
const api = new AxiosHttpClient({ baseURL: '/api/', timeout: 10000 })
const orders = await api.get<{ id: string }[]>('orders', { params: { page: 1 } })
const response = await api.requestRaw<{ id: string }[]>({ method: 'get', url: 'orders' })
// response 保留 data、status、headers、config 等原生字段。Axios 是包的运行依赖,无需为了此客户端再安装一份。配置使用原生 Axios 契约:timeout、params、data、signal、responseType、withCredentials 等。
方法
| 方法 | 返回值 |
|---|---|
get(url, config?)、delete(url, config?) | 响应体 T |
post(url, data?, config?)、put、patch | 响应体 T |
request<T, D>(config) | 响应体 T,D 为请求体类型 |
requestRaw<T, D>(config) | 完整 AxiosResponse |
instance | 独立的原生 Axios 实例 |
interceptors | 原生请求和响应拦截器管理器 |
响应体如为 { code, data },普通方法返回整个对象,不再次取 data、不判断 code。失败时保留 Axios 原始错误,可使用 Axios 的 isAxiosError、isCancel 判断;它不是 Fetch 的 HttpError。
拦截器
ts
const requestId = api.interceptors.request.use(config => {
config.headers.set('X-Client', 'order-app')
return config
})
const responseId = api.interceptors.response.use(response => {
// 必须返回完整 AxiosResponse,以保持客户端方法的返回类型和解包规则。
return response
})
// 应用卸载或不再需要时释放。
api.interceptors.request.eject(requestId)
api.interceptors.response.eject(responseId)客户端不缓存 Token、不弹窗、不跳转、不自动重试。需要动态凭据注入时优先组合认证请求工厂,由应用明确提供可信 API 和凭据来源。