Skip to content

全局配置

VSchema 插件的全局配置选项。

配置方式

typescript
import { createVSchemaPlugin } from 'vschema-ui';

app.use(createVSchemaPlugin({
  baseURL: 'https://api.example.com',
  defaultHeaders: {
    'Authorization': 'Bearer token'
  },
  responseDataPath: 'data',
  responseFormat: {
    codeField: 'code',
    msgField: 'msg',
    dataField: 'data',
    successCode: 200,
  },
  components: {
    MyButton,
    MyCard,
  }
}));

配置项

baseURL

  • 类型:string
  • 默认值:''

API 请求的基础地址,会与 fetchinitApiuiApi 中的相对路径拼接。

defaultHeaders

  • 类型:Record<string, string>
  • 默认值:{}

所有 API 请求的默认请求头。

responseDataPath

  • 类型:string
  • 默认值:''

API 响应数据的路径。例如后端返回 { code: 0, data: {...} },设置为 'data' 可直接获取数据部分。

提示

如果配置了 responseFormat,系统会优先使用 responseFormat.dataField 提取数据,responseDataPath 仅在响应中不包含业务状态码时生效。

responseFormat

  • 类型:ResponseFormatConfig
  • 默认值:{ codeField: 'code', msgField: 'msg', dataField: 'data', successCode: 200 }

API 响应格式配置,用于自定义后端返回的字段名称和成功状态码判断。

responseFormat.codeField

  • 类型:string
  • 默认值:'code'

业务状态码字段名。

responseFormat.msgField

  • 类型:string
  • 默认值:'msg'

响应消息字段名。

responseFormat.dataField

  • 类型:string
  • 默认值:'data'

响应数据字段名。

responseFormat.successCode

  • 类型:number | number[]
  • 默认值:200

业务成功状态码。支持单个值或数组(多个成功码)。

示例:

typescript
// 单个成功码
responseFormat: {
  successCode: 0
}

// 多个成功码
responseFormat: {
  successCode: [0, 200]
}

// 自定义字段名
responseFormat: {
  codeField: 'status',
  msgField: 'message',
  dataField: 'result',
  successCode: 0
}

components

  • 类型:Record<string, Component>
  • 默认值:{}

注册的自定义组件。

requestInterceptor

  • 类型:(config: RequestConfig) => RequestConfig | Promise<RequestConfig>
  • 默认值:undefined

请求拦截器,在每次请求前调用。

typescript
requestInterceptor: (config) => {
  config.headers['X-Request-Id'] = generateId();
  return config;
}

responseInterceptor

  • 类型:(response: any) => any | Promise<any>
  • 默认值:undefined

响应拦截器,在每次成功响应后调用。

typescript
responseInterceptor: (response) => {
  console.log('Response:', response);
  return response;
}

errorInterceptor

  • 类型:(error: any) => any | Promise<any>
  • 默认值:undefined

错误拦截器,在请求失败或业务状态码表示失败时调用。

typescript
errorInterceptor: (error) => {
  if (error.code === 401) {
    // 跳转登录页
    router.push('/login');
  }
  throw error;
}

类型定义

typescript
/**
 * 标准 API 响应格式
 */
interface ApiResponse<T = any> {
  code: number;
  msg: string;
  data: T;
}

/**
 * 响应格式配置
 */
interface ResponseFormatConfig {
  /** 业务状态码字段名,默认 "code" */
  codeField?: string;
  /** 消息字段名,默认 "msg" */
  msgField?: string;
  /** 数据字段名,默认 "data" */
  dataField?: string;
  /** 业务成功状态码,默认 200 */
  successCode?: number | number[];
}

/**
 * 请求配置
 */
interface RequestConfig {
  url: string;
  method: string;
  headers: Record<string, string>;
  body?: any;
}

/**
 * 全局配置
 */
interface GlobalConfig {
  baseURL?: string;
  defaultHeaders?: Record<string, string>;
  responseDataPath?: string;
  responseFormat?: ResponseFormatConfig;
  requestInterceptor?: (config: RequestConfig) => RequestConfig | Promise<RequestConfig>;
  responseInterceptor?: (response: any) => any | Promise<any>;
  errorInterceptor?: (error: any) => any | Promise<any>;
  components?: Record<string, Component>;
}

Released under the MIT License.