nest-best-practices

Compare original and translation side by side

🇺🇸

Original

English
🇨🇳

Translation

Chinese
NestJS is a progressive Node.js framework for building efficient and scalable server-side applications. It uses TypeScript by default, supports both Express and Fastify, and provides an out-of-the-box application architecture inspired by Angular. NestJS combines elements of OOP, FP, and FRP, making it ideal for building enterprise-grade applications.
Skill based on NestJS documentation, updated 2026-03-28. Covers NestJS v11 with Express v5.
NestJS是一款渐进式Node.js框架,用于构建高效、可扩展的服务端应用。它默认使用TypeScript,同时支持Express和Fastify,并提供了受Angular启发的开箱即用应用架构。NestJS融合了面向对象编程(OOP)、函数式编程(FP)和函数响应式编程(FRP)的特性,非常适合构建企业级应用。
本指南基于NestJS文档编写,更新于2026年3月28日,涵盖NestJS v11与Express v5的内容。

How to Use This Skill

如何使用本指南

When generating NestJS code, read the relevant reference files below for the specific topic. The references contain current API patterns, correct import paths, and production-ready examples.
Always apply the production best practices below — these are patterns that matter in production and are easy to miss without explicit guidance.
在生成NestJS代码时,请阅读下方对应主题的参考文件。这些参考文件包含当前的API模式、正确的导入路径和生产环境可用的示例。
请始终遵循以下生产环境最佳实践——这些是生产环境中至关重要但若无明确指导容易遗漏的实现模式。

NestJS v11 Breaking Changes

NestJS v11 破坏性变更

Be aware of these when generating code for NestJS v11+:
在为NestJS v11+生成代码时,请注意以下变更:

Node.js v20+ Required

Node.js v20+ 是最低要求

Node.js v16 and v18 are no longer supported. Always target Node.js v20+.
Node.js v16和v18不再被支持,请始终以Node.js v20+为目标版本。

Express v5 Route Matching

Express v5 路由匹配规则

NestJS v11 uses Express v5 by default. Route patterns have changed:
Express v4 (Old)Express v5 (New)Notes
@Get('users/*')
@Get('users/*splat')
Wildcards must be named
forRoutes('*')
forRoutes('{*splat}')
Braces make path optional (matches root)
?
optional character
Not supportedUse braces
{}
instead
Regex in routesNot supportedRegex characters no longer work
NestJS v11默认使用Express v5,路由匹配规则发生了变化:
Express v4(旧版)Express v5(新版)说明
@Get('users/*')
@Get('users/*splat')
通配符必须命名
forRoutes('*')
forRoutes('{*splat}')
大括号表示路径可选(匹配根路径)
?
可选字符
不支持请改用大括号
{}
路由中的正则表达式不支持正则表达式字符不再生效

CacheModule Migration to Keyv

CacheModule 迁移至Keyv

The
CacheModule
now uses Keyv adapters instead of
cache-manager
stores:
typescript
// OLD (pre-v11) — no longer works
CacheModule.register({ store: redisStore, host: 'localhost', port: 6379 });

// NEW (v11+) — uses @keyv/redis
import { KeyvRedis } from '@keyv/redis';
CacheModule.registerAsync({
  useFactory: async () => ({
    stores: [new KeyvRedis('redis://localhost:6379')],
  }),
});
CacheModule
现在使用Keyv适配器替代
cache-manager
存储:
typescript
// 旧版(v11之前)—— 不再生效
CacheModule.register({ store: redisStore, host: 'localhost', port: 6379 });

// 新版(v11+)—— 使用@keyv/redis
import { KeyvRedis } from '@keyv/redis';
CacheModule.registerAsync({
  useFactory: async () => ({
    stores: [new KeyvRedis('redis://localhost:6379')],
  }),
});

Production Best Practices

生产环境最佳实践

Bootstrap & Application Setup

启动与应用配置

Configure
ValidationPipe
globally in
main.ts
— this is a security-critical step:
typescript
app.useGlobalPipes(new ValidationPipe({
  whitelist: true,           // strips unknown properties
  forbidNonWhitelisted: true, // rejects requests with unknown properties (400)
  transform: true,            // enables automatic type coercion for params
}));
main.ts
中全局配置
ValidationPipe
——这是一项安全性关键步骤:
typescript
app.useGlobalPipes(new ValidationPipe({
  whitelist: true,           // 移除未知属性
  forbidNonWhitelisted: true, // 拒绝包含未知属性的请求(返回400)
  transform: true,            // 启用参数自动类型转换
}));

Entity & Schema Discipline

实体与Schema规范

  • Use explicit column lengths:
    @Column({ length: 255 })
    , not bare
    @Column()
  • Name tables explicitly:
    @Entity('books')
    to avoid surprises with naming conventions
  • Use
    @CreateDateColumn()
    and
    @UpdateDateColumn()
    for automatic timestamps
  • Use specialized validators like
    @IsISBN()
    ,
    @IsEmail()
    ,
    @IsUUID()
    — not just
    @IsString()
  • Align nullability between entity and DTO: if
    @Column({ nullable: true })
    , the DTO field should be
    @IsOptional()
  • 使用明确的列长度:
    @Column({ length: 255 })
    ,而非直接使用
    @Column()
  • 显式指定表名:
    @Entity('books')
    ,避免命名约定带来的意外问题
  • 使用
    @CreateDateColumn()
    @UpdateDateColumn()
    自动生成时间戳
  • 使用专用验证器如
    @IsISBN()
    @IsEmail()
    @IsUUID()
    ——而非仅使用
    @IsString()
  • 保持实体与DTO的可空性一致:如果实体字段为
    @Column({ nullable: true })
    ,则DTO中对应字段应标记为
    @IsOptional()

DTO Patterns

DTO 实现模式

  • Import
    PartialType
    from
    @nestjs/swagger
    (not
    @nestjs/mapped-types
    ) when using Swagger — this preserves API documentation metadata on partial fields
  • Zod validation is now an officially supported alternative to
    class-validator
    — use
    ZodValidationPipe
    with
    z.infer<typeof schema>
    for schema-first validation with type inference
  • 当使用Swagger时,从
    @nestjs/swagger
    导入
    PartialType
    (而非
    @nestjs/mapped-types
    )——这会保留部分字段的API文档元数据
  • Zod验证现已成为
    class-validator
    的官方替代方案——结合
    ZodValidationPipe
    z.infer<typeof schema>
    实现基于Schema的验证,并支持类型推断

Guards & Auth

守卫与认证

NestJS v11 documents two auth approaches:
  1. Native JWT (recommended for simpler cases): Use
    @nestjs/jwt
    directly with a custom
    CanActivate
    guard that calls
    JwtService.verifyAsync()
    . No Passport dependency needed.
  2. Passport-based (for complex strategies like OAuth2, SAML): Use
    @nestjs/passport
    with
    PassportStrategy
    . Now documented under "recipes" rather than primary auth docs.
Regardless of approach:
  • Guard ordering matters:
    @UseGuards(JwtAuthGuard, RolesGuard)
    — JWT guard must run first to populate
    request.user
    before RolesGuard reads it
  • Use
    Reflector.getAllAndOverride()
    (not just
    .get()
    ) so roles can be set at both handler and class level with handler taking precedence
  • RolesGuard must throw
    ForbiddenException
    with a descriptive message when the user lacks the required role — do NOT just return
    false
    from
    canActivate()
    . The generic 403 provides no diagnostic value. Include context:
    throw new ForbiddenException(\
    Requires roles: ${requiredRoles.join(', ')}`)`
  • Never hardcode JWT secrets — use
    JwtModule.registerAsync()
    with
    ConfigService
  • Define a
    Role
    enum rather than raw strings for type safety
  • In
    JwtStrategy.validate()
    (or native guard), validate the presence of required payload fields (
    sub
    ,
    username
    ,
    roles
    ) before returning the user object. Define a
    JwtPayload
    interface for type safety.
NestJS v11文档中介绍了两种认证方式:
  1. 原生JWT(推荐用于简单场景):直接使用
    @nestjs/jwt
    ,配合自定义
    CanActivate
    守卫调用
    JwtService.verifyAsync()
    。无需依赖Passport。
  2. 基于Passport(适用于OAuth2、SAML等复杂策略):使用
    @nestjs/passport
    PassportStrategy
    。该方式现在被归类到“实践方案”而非核心认证文档中。
无论采用哪种方式:
  • 守卫的执行顺序至关重要:
    @UseGuards(JwtAuthGuard, RolesGuard)
    ——JWT守卫必须先执行,在RolesGuard读取
    request.user
    之前完成用户信息填充
  • 使用
    Reflector.getAllAndOverride()
    (而非仅使用
    .get()
    ),这样可以在处理器和类级别同时设置角色,且处理器级别的设置优先级更高
  • 当用户缺少所需角色时,RolesGuard必须抛出带有描述性信息的
    ForbiddenException
    ——不要仅从
    canActivate()
    返回
    false
    。通用的403错误无法提供诊断价值,请包含上下文信息:
    throw new ForbiddenException(\
    需要角色:${requiredRoles.join(', ')}`)`
  • 切勿硬编码JWT密钥——使用
    JwtModule.registerAsync()
    配合
    ConfigService
  • 定义
    Role
    枚举而非原始字符串以保证类型安全
  • JwtStrategy.validate()
    (或原生守卫)中,在返回用户对象之前,验证所需负载字段(
    sub
    username
    roles
    )是否存在。定义
    JwtPayload
    接口以保证类型安全。

Error Messages

错误信息

All thrown exceptions (
ForbiddenException
,
UnauthorizedException
,
NotFoundException
, etc.) should include descriptive messages that identify what was expected, what was found, and what action the consumer should take. Do not rely on framework default messages in production code.
所有抛出的异常(
ForbiddenException
UnauthorizedException
NotFoundException
等)都应包含描述性信息,说明预期内容、实际情况以及用户应采取的操作。生产环境代码中不要依赖框架默认的错误信息。

Microservices & Queues

微服务与队列

  • For hybrid apps (HTTP + microservice), use
    NestFactory.create()
    +
    app.connectMicroservice()
    pattern
  • Always call
    app.enableShutdownHooks()
    when using Terminus health checks for graceful shutdown
  • Use
    @nestjs/bullmq
    (not
    @nestjs/bull
    ) — it wraps the newer
    bullmq
    library. Config uses
    connection
    key (not
    redis
    ):
    typescript
    BullModule.forRoot({ connection: { host: 'localhost', port: 6379 } })
  • Use
    BullModule.forRootAsync()
    with
    ConfigService
    injection for production config
  • BullMQ consumers extend
    WorkerHost
    and implement
    process()
    — do NOT use the
    @Process()
    decorator (that's the older
    @nestjs/bull
    API)
  • Register
    @OnWorkerEvent('completed')
    and
    @OnWorkerEvent('failed')
    lifecycle hooks for observability
  • Set
    removeOnComplete: true
    and configure retry with
    backoff: { type: 'exponential' }
    on jobs
  • Capture and log
    job.id
    from
    queue.add()
    return value for traceability
  • Use
    job.updateProgress()
    for long-running jobs to enable monitoring dashboards
  • Define and export TypeScript interfaces for all event payloads (e.g.,
    OrderCreatedEvent
    ,
    UserRegisteredEvent
    ) for type safety across service boundaries
  • 对于混合应用(HTTP + 微服务),使用
    NestFactory.create()
    +
    app.connectMicroservice()
    模式
  • 使用Terminus健康检查时,请务必调用
    app.enableShutdownHooks()
    以实现优雅关闭
  • 使用
    @nestjs/bullmq
    (而非
    @nestjs/bull
    )——它封装了更新的
    bullmq
    库。配置时使用
    connection
    键(而非
    redis
    ):
    typescript
    BullModule.forRoot({ connection: { host: 'localhost', port: 6379 } })
  • 使用
    BullModule.forRootAsync()
    并注入
    ConfigService
    以实现生产环境配置
  • BullMQ消费者需继承
    WorkerHost
    并实现
    process()
    ——不要使用
    @Process()
    装饰器(这是旧版
    @nestjs/bull
    的API)
  • 注册
    @OnWorkerEvent('completed')
    @OnWorkerEvent('failed')
    生命周期钩子以实现可观测性
  • 为作业设置
    removeOnComplete: true
    ,并配置指数退避重试:
    backoff: { type: 'exponential' }
  • 捕获并记录
    queue.add()
    返回值中的
    job.id
    以实现可追踪性
  • 对于长时间运行的作业,使用
    job.updateProgress()
    以支持监控仪表盘
  • 为所有事件负载定义并导出TypeScript接口(如
    OrderCreatedEvent
    UserRegisteredEvent
    ),以保证跨服务边界的类型安全

Health Checks

健康检查

  • Don't just check one thing — include multiple indicators: service connectivity (Redis/DB), memory (heap + RSS), and disk usage
  • Use
    MicroserviceHealthIndicator
    for transport checks,
    MemoryHealthIndicator
    for heap/RSS,
    DiskHealthIndicator
    for storage
  • Configure graceful shutdown timeout:
    TerminusModule.forRoot({ gracefulShutdownTimeoutMs: 1000 })
  • 不要仅检查单一指标——应包含多个检查项:服务连通性(Redis/数据库)、内存(堆内存+RSS)、磁盘使用情况
  • 使用
    MicroserviceHealthIndicator
    检查传输层状态,
    MemoryHealthIndicator
    检查堆内存/RSS,
    DiskHealthIndicator
    检查存储状态
  • 配置优雅关闭超时:
    TerminusModule.forRoot({ gracefulShutdownTimeoutMs: 1000 })

OpenAPI / Swagger

OpenAPI / Swagger

The
@nestjs/swagger
CLI plugin can eliminate most manual
@ApiProperty()
annotations. Add to
nest-cli.json
:
json
{
  "compilerOptions": {
    "plugins": [{
      "name": "@nestjs/swagger",
      "options": { "classValidatorShim": true, "introspectComments": true }
    }]
  }
}
With the plugin enabled, TypeScript types, default values, optional markers, and JSDoc comments are automatically inferred — you only need explicit
@ApiProperty()
for edge cases.
@nestjs/swagger
CLI插件可消除大部分手动编写
@ApiProperty()
注解的工作。将其添加到
nest-cli.json
中:
json
{
  "compilerOptions": {
    "plugins": [{
      "name": "@nestjs/swagger",
      "options": { "classValidatorShim": true, "introspectComments": true }
    }]
  }
}
启用插件后,TypeScript类型、默认值、可选标记和JSDoc注释会被自动推断——仅在特殊场景下才需要显式使用
@ApiProperty()

Testing

测试

  • @suites/unit
    is now a recommended testing library for NestJS:
    • TestBed.solitary(Service).compile()
      — all dependencies auto-mocked
    • TestBed.sociable(Service).expose(RealDep).compile()
      — selected real deps
    • Mocked<T>
      type for full IntelliSense on mock methods
    • Supports Jest, Vitest, and Sinon
  • For e2e testing, use
    @nestjs/testing
    with
    Test.createTestingModule()
    and
    supertest
  • @suites/unit
    现已成为NestJS推荐的测试库:
    • TestBed.solitary(Service).compile()
      —— 所有依赖自动被模拟
    • TestBed.sociable(Service).expose(RealDep).compile()
      —— 选择部分真实依赖
    • Mocked<T>
      类型为模拟方法提供完整的智能提示
    • 支持Jest、Vitest和Sinon
  • 对于端到端测试,使用
    @nestjs/testing
    配合
    Test.createTestingModule()
    supertest

Custom Decorators

自定义装饰器

  • For NestJS 10+, prefer
    Reflector.createDecorator<Role[]>()
    over
    SetMetadata
    for custom decorators — it provides better type inference and eliminates the need for a separate metadata key constant
  • The
    SetMetadata
    pattern still works and is fine for simple cases
  • 对于NestJS 10+,优先使用
    Reflector.createDecorator<Role[]>()
    而非
    SetMetadata
    来创建自定义装饰器——它提供了更好的类型推断,且无需单独的元数据键常量
  • SetMetadata
    模式仍然有效,适用于简单场景

CLI

CLI

TopicDescriptionReference
CLI OverviewScaffolding, building, and running applicationscli-overview
Monorepo & LibrariesWorkspaces, apps, shared librariescli-monorepo
主题描述参考文档
CLI 概述脚手架、构建与运行应用cli-overview
单体仓库与库工作区、应用、共享库cli-monorepo

Core References

核心模块参考

TopicDescriptionReference
ControllersRoute handlers, HTTP methods, request/response handlingcore-controllers
ModulesApplication structure, feature modules, shared modules, dynamic modulescore-modules
ProvidersServices, dependency injection, custom providerscore-providers
Dependency InjectionDI fundamentals, custom providers, scopescore-dependency-injection
MiddlewareRequest/response middleware, functional middlewarecore-middleware
主题描述参考文档
控制器路由处理器、HTTP方法、请求/响应处理core-controllers
模块应用结构、功能模块、共享模块、动态模块core-modules
提供者服务、依赖注入、自定义提供者core-providers
依赖注入依赖注入基础、自定义提供者、作用域core-dependency-injection
中间件请求/响应中间件、函数式中间件core-middleware

Fundamentals

基础概念

TopicDescriptionReference
PipesData transformation and validation pipesfundamentals-pipes
GuardsAuthorization guards, role-based access controlfundamentals-guards
InterceptorsAspect-oriented programming, response transformationfundamentals-interceptors
Exception FiltersError handling, custom exception filtersfundamentals-exception-filters
Custom DecoratorsCreating custom parameter decoratorsfundamentals-custom-decorators
Dynamic ModulesConfigurable modules, module configurationfundamentals-dynamic-modules
Execution ContextAccessing request context, metadata reflectionfundamentals-execution-context
Provider ScopesSingleton, request-scoped, transient providersfundamentals-provider-scopes
Lifecycle EventsApplication and provider lifecycle hooksfundamentals-lifecycle-events
Lazy LoadingLoading modules on-demand for serverlessfundamentals-lazy-loading
Circular DependencyResolving circular dependencies with forwardReffundamentals-circular-dependency
Module ReferenceAccessing providers dynamically with ModuleReffundamentals-module-reference
TestingUnit testing and e2e testing with @nestjs/testingfundamentals-testing
主题描述参考文档
管道数据转换与验证管道fundamentals-pipes
守卫授权守卫、基于角色的访问控制fundamentals-guards
拦截器面向切面编程、响应转换fundamentals-interceptors
异常过滤器错误处理、自定义异常过滤器fundamentals-exception-filters
自定义装饰器创建自定义参数装饰器fundamentals-custom-decorators
动态模块可配置模块、模块配置fundamentals-dynamic-modules
执行上下文访问请求上下文、元数据反射fundamentals-execution-context
提供者作用域单例、请求作用域、临时提供者fundamentals-provider-scopes
生命周期事件应用与提供者生命周期钩子fundamentals-lifecycle-events
懒加载按需加载模块以适配无服务器架构fundamentals-lazy-loading
循环依赖使用forwardRef解决循环依赖fundamentals-circular-dependency
模块引用使用ModuleRef动态访问提供者fundamentals-module-reference
测试使用@nestjs/testing进行单元测试与端到端测试fundamentals-testing

Techniques

技术实现

TopicDescriptionReference
ValidationValidationPipe, class-validator, Zod validationtechniques-validation
ConfigurationEnvironment variables, ConfigModule, configuration managementtechniques-configuration
DatabaseTypeORM, Prisma, MongoDB integrationtechniques-database
CachingKeyv-based cache manager, Redis integrationtechniques-caching
LoggingBuilt-in logger, custom loggers, JSON loggingtechniques-logging
File UploadFile upload handling with multer, validationtechniques-file-upload
VersioningURI, header, and media type API versioningtechniques-versioning
SerializationResponse serialization with class-transformertechniques-serialization
QueuesBackground job processing with BullMQtechniques-queues
Task SchedulingCron jobs, intervals, and timeoutstechniques-task-scheduling
EventsEvent-driven architecture with EventEmittertechniques-events
HTTP ModuleMaking HTTP requests with Axiostechniques-http-module
FastifyUsing Fastify for better performancetechniques-fastify
Sessions & CookiesHTTP sessions and cookies for stateful appstechniques-sessions-cookies
Streaming & SSECompression, file streaming, Server-Sent Eventstechniques-compression-streaming-sse
MVC & Serve StaticTemplate rendering (Handlebars) and SPA static servingtechniques-mvc-serve-static
主题描述参考文档
验证ValidationPipe、class-validator、Zod验证techniques-validation
配置环境变量、ConfigModule、配置管理techniques-configuration
数据库TypeORM、Prisma、MongoDB集成techniques-database
缓存基于Keyv的缓存管理器、Redis集成techniques-caching
日志内置日志器、自定义日志器、JSON格式日志techniques-logging
文件上传使用multer处理文件上传、验证techniques-file-upload
版本控制URI、请求头、媒体类型API版本控制techniques-versioning
序列化使用class-transformer进行响应序列化techniques-serialization
队列使用BullMQ处理后台作业techniques-queues
任务调度Cron任务、定时任务与延迟任务techniques-task-scheduling
事件基于EventEmitter的事件驱动架构techniques-events
HTTP模块使用Axios发送HTTP请求techniques-http-module
Fastify使用Fastify提升性能techniques-fastify
会话与Cookie用于有状态应用的HTTP会话与Cookietechniques-sessions-cookies
流与SSE压缩、文件流、服务器发送事件techniques-compression-streaming-sse
MVC与静态资源服务模板渲染(Handlebars)与SPA静态资源服务techniques-mvc-serve-static

Security

安全

TopicDescriptionReference
AuthenticationNative JWT auth and Passport integrationrecipes-authentication
AuthorizationRBAC, claims-based, CASL integrationsecurity-authorization
CORS & Rate LimitingCORS, Helmet, ThrottlerModulesecurity-cors-helmet-rate-limiting
Encryption & Hashingbcrypt, argon2, password hashingsecurity-encryption-hashing
主题描述参考文档
身份验证原生JWT认证与Passport集成recipes-authentication
授权RBAC、基于声明的授权、CASL集成security-authorization
CORS与速率限制CORS、Helmet、ThrottlerModulesecurity-cors-helmet-rate-limiting
加密与哈希bcrypt、argon2、密码哈希security-encryption-hashing

OpenAPI

OpenAPI

TopicDescriptionReference
SwaggerOpenAPI documentation generation, CLI pluginopenapi-swagger
主题描述参考文档
SwaggerOpenAPI文档生成、CLI插件openapi-swagger

WebSockets

WebSocket

TopicDescriptionReference
GatewaysReal-time communication with Socket.IO/wswebsockets-gateways
Guards & Exception FiltersWsException, BaseWsExceptionFilter, interceptors, pipeswebsockets-advanced
主题描述参考文档
网关使用Socket.IO/ws实现实时通信websockets-gateways
守卫与异常过滤器WsException、BaseWsExceptionFilter、拦截器、管道websockets-advanced

Microservices

微服务

TopicDescriptionReference
OverviewTransport layers, message patterns, eventsmicroservices-overview
gRPCProtocol Buffers, streaming, metadata, reflectionmicroservices-grpc
TransportsRedis, Kafka, NATS, RabbitMQ configurationmicroservices-transports
主题描述参考文档
概述传输层、消息模式、事件microservices-overview
gRPCProtocol Buffers、流、元数据、反射microservices-grpc
传输层Redis、Kafka、NATS、RabbitMQ配置microservices-transports

GraphQL

GraphQL

TopicDescriptionReference
OverviewCode-first and schema-first approachesgraphql-overview
Resolvers & MutationsQueries, mutations, field resolversgraphql-resolvers-mutations
SubscriptionsReal-time subscriptions with PubSubgraphql-subscriptions
Scalars, Unions & EnumsInterfaces, scalars, union types, enumsgraphql-scalars-unions-enums
主题描述参考文档
概述代码优先与Schema优先方案graphql-overview
解析器与变更查询、变更、字段解析器graphql-resolvers-mutations
订阅使用PubSub实现实时订阅graphql-subscriptions
标量、联合类型与枚举接口、标量、联合类型、枚举graphql-scalars-unions-enums

Recipes

实践方案

TopicDescriptionReference
CRUD GeneratorNest CLI resource generatorrecipes-crud-generator
DocumentationOpenAPI/Swagger integrationrecipes-documentation
TypeORMTypeORM integration and usagerecipes-typeorm
PrismaPrisma ORM integrationrecipes-prisma
MongooseMongoDB with Mongoose ODMrecipes-mongoose
CQRSCommand Query Responsibility Segregationrecipes-cqrs
TerminusHealth checks and readiness/liveness probesrecipes-terminus
主题描述参考文档
CRUD生成器Nest CLI资源生成器recipes-crud-generator
文档OpenAPI/Swagger集成recipes-documentation
TypeORMTypeORM集成与使用recipes-typeorm
PrismaPrisma ORM集成recipes-prisma
MongooseMongoDB与Mongoose ODM集成recipes-mongoose
CQRS命令查询职责分离recipes-cqrs
Terminus健康检查与就绪/存活探针recipes-terminus

FAQ

常见问题

TopicDescriptionReference
Raw Body & HybridWebhook signature verification, HTTP + microservicesfaq-raw-body-hybrid
主题描述参考文档
原始请求体与混合应用Webhook签名验证、HTTP + 微服务faq-raw-body-hybrid

Best Practices

最佳实践

TopicDescriptionReference
Request LifecycleUnderstanding execution order and flowbest-practices-request-lifecycle
主题描述参考文档
请求生命周期理解执行顺序与流程best-practices-request-lifecycle