Appearance
api-client
路径:packages/shared/api-client
基于 axios 的 HTTP 客户端,统一 Token 注入与 401 自动 refresh。
创建客户端
typescript
import { createApiClient, createLocalStorageTokenStorage } from '@xichen-full-stack/api-client'
const api = createApiClient({
baseURL: 'http://localhost:8080',
tokenStorage: createLocalStorageTokenStorage(),
onUnauthorized: () => { /* 跳转登录 */ },
})API 分组
| 命名空间 | 方法 |
|---|---|
api.auth | login、refresh、logout、me、changePassword |
api.system.users | list、get、create、update、delete、assignRoles |
api.system.roles | list、create、update、delete、assignPermissions |
api.system.menus | list、create、update、delete |
api.system.permissions | list |
401 刷新流程
- 业务请求返回 401
- 用 refreshToken 调
/api/v1/auth/refresh(不走拦截器循环) - 成功则重试原请求;失败则
clearTokens+onUnauthorized
错误类型
typescript
import { isApiError, ApiError } from '@xichen-full-stack/api-client'
try {
await api.auth.login({ username, password })
} catch (e) {
if (isApiError(e)) console.error(e.code, e.message)
}admin 包中的用法
admin 内部通过 initApiClient(baseURL) + getApi() 获取单例,应用层一般直接使用 admin 的 store。
构建
bash
pnpm --filter @xichen-full-stack/api-client build