Skip to content

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.authlogin、refresh、logout、me、changePassword
api.system.userslist、get、create、update、delete、assignRoles
api.system.roleslist、create、update、delete、assignPermissions
api.system.menuslist、create、update、delete
api.system.permissionslist

401 刷新流程

  1. 业务请求返回 401
  2. 用 refreshToken 调 /api/v1/auth/refresh(不走拦截器循环)
  3. 成功则重试原请求;失败则 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

Xichen Full Stack 内部文档