配置项
本页详细列出 VextJS 的所有配置字段、类型、默认值及使用说明。
配置加载机制
VextJS 使用多层配置合并策略,按优先级从低到高:
合并后的配置通过 deepFreeze() 深冻结,运行时不可修改。
配置文件清单
src/config/bootstrap.ts
当数据库、密钥或配置中心 patch 需要在配置冻结前完成注入时,可新增:
约束:
- provider 必须返回 plain object patch 或
null - patch 只支持 JSON-like 结构
required未声明时:production默认 fail-fast,development / test默认 warning 后继续- Cluster 模式下,同一启动周期会复用同一份 provider patch,避免 Master / Worker 看到不同结果
配置文件示例
完整配置参考
VextConfig
adapter
底层 HTTP 适配器,支持三种传参方式:
trustProxy
当设置为 true 时:
req.ip从X-Forwarded-For请求头读取第一个 IPreq.protocol从X-Forwarded-Proto请求头读取
部署在 Nginx / 云负载均衡器之后时需开启此选项。
middlewares
路由级中间件白名单声明。只有在此处声明的中间件才能在路由 options.middlewares 中引用。
全局中间件(如 CORS、body-parser)由框架自动注册,无需在此声明。此处只声明路由级可选中间件。
VextCorsConfig
跨域资源共享配置。
origins: ['*'] 与 credentials: true 不能同时使用。需要携带凭证时必须指定具体域名。
VextRateLimitConfig
全局速率限制配置,基于 flex-rate-limit 实现。
keyBy 选项
路由级可通过 options.override.rateLimit 覆盖全局配置,或设为 false 禁用限流。
VextRequestIdConfig
请求 ID 追踪配置,用于日志关联和分布式链路追踪。
requestId vs traceId
requestId 是 vext 内置的请求唯一标识,traceId 通常指 APM 链路追踪系统(如 OpenTelemetry / Jaeger)生成的追踪 ID。两者有不同的使用场景:
模式一:requestId 充当 traceId(简单场景)
将 requestId 的请求头名改为 x-trace-id,使其与链路追踪头统一,适合不依赖外部 APM 的系统:
模式二:requestId + APM traceId 并存(企业级场景)
保留 requestId(日志关联),同时通过 config.fetch.propagateHeaders 透传 APM 的 traceparent 头,适合接入 OpenTelemetry / Jaeger 等系统:
- 内部系统、简单追踪 → 模式一(改 header 名为
x-trace-id) - 接入 OpenTelemetry / Jaeger / Datadog → 模式二(保留 requestId,配置 propagateHeaders)
- 详见 请求上下文 → 与分布式追踪的关系 :::
也可通过插件动态替换生成器:
VextFetchConfig
内置 HTTP 客户端与请求代理配置。
VextFetchProxyTargetConfig
代理请求头优先级:target.headers < forwardHeaders < target.defaultInjectHeaders < options.headers < options.injectHeaders。Authorization 默认不透传,必须同时配置白名单和 allowAuthorizationForward: true。
代理 retry 优先级:options.retry > target.retry > config.fetch.retry > 0。仅 GET / HEAD / OPTIONS / PUT / DELETE 会在上游 5xx 或网络错误时自动重试;POST / PATCH 默认不重试,超时不重试并返回本地 504。
VextLoggerConfig
结构化日志配置,基于 Vext 内置 logger kernel 实现。
日志级别优先级(从高到低):
设置某个级别后,只输出该级别及更高级别的日志。设为 'silent' 完全静默。
默认 logger 还支持运行时 app.logger.getLevel() / app.logger.setLevel(level) 调整后续日志阈值;配置对象本身仍会在启动后冻结,不应通过修改 app.config.logger.level 动态变更。
VextShutdownConfig
优雅关闭配置。
收到 SIGTERM / SIGINT 信号后,框架会:
- 停止接受新请求
- 等待飞行中请求完成(不超过
timeout秒) - 按 LIFO 顺序执行所有
onClose钩子 - 退出进程
VextServerConfig
入站 Node.js HTTP server 层配置。适用于内置 Native / Hono / Fastify / Express / Koa adapter,也适用于 vext dev 创建的开发 server。未设置字段保持当前 Node.js 默认值。
config.server 只控制入站服务请求。出站 app.fetch / app.fetch.proxy 的超时由 config.fetch.timeout、代理目标 timeout 或调用时 options 控制。
VextResponseConfig
响应格式配置。
出口包装
启用 wrap: true 时,res.json(data) 自动包装:
错误响应格式:
禁用 wrap: false 时,res.json(data) 直接发送原始 data。
隐藏内部错误
hideInternalErrors 只影响“未知异常”这条 500 错误路径,例如路由、service、middleware 中直接 throw new Error("...") 的场景。它不会改变 app.throw(...) 或 VextValidationError 这类结构化错误的状态码与响应格式。
hideInternalErrors: true 时,500 错误不暴露 stack trace:
VextBodyParserConfig
请求体解析配置。
禁用后 req.body 始终为 undefined,适用于纯 GET 服务或自定义 body 解析场景。
maxBodySize 支持的格式:
VextMultipartConfig
Multipart / 文件上传全局配置。
:::tip Fastify 联动
multipart.maxFileSize 只限制单个文件大小;总请求体读取上限由 bodyParser.maxBodySize 控制。使用 Fastify 时,如额外传入 fastifyAdapter({ bodyLimit }),实际读取边界会取 adapter bodyLimit 与 body-parser 总体上限中的较小值。
VextAccessLogConfig
访问日志配置,基于洋葱模型 after-middleware 实现。
访问日志输出示例:
消息字段包括 HTTP 方法、路径、状态码、响应时间(ms)和客户端 IP;requestId 由 logger 的 AsyncLocalStorage mixin 自动注入到 JSON 记录字段。
VextOpenAPIConfig
OpenAPI 文档自动生成配置。
guardSecurityMap
将路由中间件名称自动映射为 OpenAPI Security Scheme:
securitySchemes
支持的安全方案类型:
VextRequestContextConfig
AsyncLocalStorage 请求上下文配置。
:::warning 禁用后以下功能失效:
- Logger 自动注入
requestId app.throw()自动解析请求级localeapp.fetch()自动传播requestId:::
VextClusterConfig
Cluster 多进程配置。完整接口定义见 src/types/app.ts VextClusterConfig。
基础字段
healthCheck — 心跳检测
reload — 零停机滚动重启
也可通过环境变量启用(无需修改配置文件):
VextCacheConfig
路由级响应缓存全局配置。
Memory 完整配置:
Redis 配置:
MultiLevel 配置:
cacheHub 只接受 response-cache-kit/cache-hub 配置,不接受自定义 Store。路由级响应缓存通过 RouteOptions.cache 配置。公开配置单位使用毫秒;响应头中的 Cache-Control: max-age 会按 HTTP 标准输出秒。详见 响应缓存指南。
DEFAULT_CONFIG
框架内置默认配置的完整值:
VextUserConfig
用户配置的输入类型,所有字段均为可选。由 loadConfig() 合并默认值后生成完整的 VextConfig。
loadConfig
配置加载函数,接收配置目录路径并执行完整配置链合并。
通常不需要手动调用,bootstrap() 内部会自动调用 loadConfig()。合并顺序为:DEFAULT_CONFIG < default < env < local < bootstrap provider patch < CLI override。
环境变量覆盖
部分配置支持通过环境变量覆盖:
类型声明扩展
插件可通过 declare module 为 VextConfig 添加自定义字段:
之后在配置文件中使用将获得完整的类型提示: