用途:在 TypeScript 中搭建 Fastify REST API,作为路由设计、请求校验与结构组织的参考。
安装依赖命令:npm i fastify @fastify/type-provider-typebox @sinclair/typebox。用 Fastify({ logger: true }).withTypeProvider() 启用 TypeBox 类型提供器。
主要能力:用 Type.Object 定义请求/响应 schema,并通过 Static<typeof Schema> 推导 TypeScript 类型;为 schema 添加 $id 以支持 OpenAPI 与复用;为路由补充 operationId、tags、summary 及覆盖各状态码的响应 schema;区分输入 schema(CreateX,省略生成字段)与输出 schema(X)。常见模式包括路径参数、带分页的查询串、分页响应包装,以及用 Type.Union([Type.Literal(...)]) 表示字符串枚举、用 Type.Optional() 标记可选字段。
模块化与错误处理:导出 FastifyTypebox 类型供各路由文件复用,通过 app.register(userRoutes, { prefix: '/api/v1' }) 注册。采用 RFC 7807 ProblemDetail,用 Type.Composite 组合出 400/401/403/404/500 等错误响应;通过 setErrorHandler 处理校验错误(FST_ERR_VALIDATION)与领域错误。可用 addSchema 加 Type.Ref 引用共享 schema。
鉴权与限制:可用 headers schema 校验 Bearer 令牌,结合 preValidation 校验;用 app.decorate 添加 hasPermissions 权限检查装饰器,配合 preHandler 保护路由,并通过 declare module 'fastify' 扩展 FastifyRequest。资料未提供实际部署、性能数据或收费信息。