@dangao/bun-server 1.8.0 → 1.8.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (62) hide show
  1. package/docs/api.md +194 -81
  2. package/docs/extensions.md +53 -0
  3. package/docs/guide.md +243 -1
  4. package/docs/microservice-config-center.md +73 -74
  5. package/docs/microservice-nacos.md +89 -90
  6. package/docs/microservice-service-registry.md +85 -86
  7. package/docs/microservice.md +142 -137
  8. package/docs/request-lifecycle.md +45 -4
  9. package/docs/symbol-interface-pattern.md +106 -106
  10. package/docs/zh/api.md +458 -18
  11. package/docs/zh/extensions.md +53 -0
  12. package/docs/zh/guide.md +251 -4
  13. package/docs/zh/microservice-config-center.md +258 -0
  14. package/docs/zh/microservice-nacos.md +346 -0
  15. package/docs/zh/microservice-service-registry.md +306 -0
  16. package/docs/zh/microservice.md +680 -0
  17. package/docs/zh/request-lifecycle.md +43 -5
  18. package/package.json +1 -1
  19. package/tests/auth/auth-decorators.test.ts +241 -0
  20. package/tests/auth/oauth2-service.test.ts +318 -0
  21. package/tests/cache/cache-decorators-extended.test.ts +272 -0
  22. package/tests/cache/cache-interceptors.test.ts +534 -0
  23. package/tests/cache/cache-service-proxy.test.ts +246 -0
  24. package/tests/cache/memory-cache-store.test.ts +155 -0
  25. package/tests/cache/redis-cache-store.test.ts +199 -0
  26. package/tests/config/config-center-integration.test.ts +334 -0
  27. package/tests/config/config-module-extended.test.ts +165 -0
  28. package/tests/controller/param-binder.test.ts +333 -0
  29. package/tests/error/error-handler.test.ts +166 -57
  30. package/tests/error/i18n-extended.test.ts +105 -0
  31. package/tests/events/event-listener-scanner.test.ts +114 -0
  32. package/tests/events/event-module.test.ts +133 -302
  33. package/tests/extensions/logger-module.test.ts +158 -0
  34. package/tests/files/file-storage.test.ts +136 -0
  35. package/tests/interceptor/base-interceptor.test.ts +605 -0
  36. package/tests/interceptor/builtin/cache-interceptor.test.ts +233 -86
  37. package/tests/interceptor/builtin/log-interceptor.test.ts +469 -0
  38. package/tests/interceptor/builtin/permission-interceptor.test.ts +219 -120
  39. package/tests/interceptor/interceptor-chain.test.ts +241 -189
  40. package/tests/interceptor/interceptor-metadata.test.ts +221 -0
  41. package/tests/microservice/circuit-breaker.test.ts +221 -0
  42. package/tests/microservice/service-client-decorators.test.ts +86 -0
  43. package/tests/microservice/service-client-interceptors.test.ts +274 -0
  44. package/tests/microservice/service-registry-decorators.test.ts +147 -0
  45. package/tests/microservice/tracer.test.ts +213 -0
  46. package/tests/microservice/tracing-collectors.test.ts +168 -0
  47. package/tests/middleware/builtin/middleware-builtin-extended.test.ts +237 -0
  48. package/tests/middleware/builtin/rate-limit.test.ts +257 -0
  49. package/tests/middleware/middleware-decorators.test.ts +222 -0
  50. package/tests/middleware/middleware-pipeline.test.ts +160 -0
  51. package/tests/queue/queue-decorators.test.ts +139 -0
  52. package/tests/queue/queue-service.test.ts +191 -0
  53. package/tests/request/body-parser-extended.test.ts +291 -0
  54. package/tests/request/request-wrapper.test.ts +319 -0
  55. package/tests/router/router-decorators.test.ts +260 -0
  56. package/tests/router/router-extended.test.ts +298 -0
  57. package/tests/security/guards/reflector.test.ts +188 -0
  58. package/tests/security/security-filter.test.ts +182 -0
  59. package/tests/security/security-module-extended.test.ts +133 -0
  60. package/tests/session/memory-session-store.test.ts +172 -0
  61. package/tests/session/session-decorators.test.ts +163 -0
  62. package/tests/swagger/ui.test.ts +212 -0
package/docs/zh/api.md CHANGED
@@ -7,7 +7,9 @@
7
7
  | API | 描述 |
8
8
  | -------------------------- | ---------------------------------------------------------------------------------------------------------------------------- |
9
9
  | `Application(options?)` | 应用主类,支持 `use` 注册全局中间件、`registerController`/`registerWebSocketGateway` 注册组件以及 `listen/stop` 管理生命周期 |
10
+ | `BunServer(options?)` | 底层服务器封装,提供对 Bun 服务器 API 的直接访问 |
10
11
  | `Context` | 统一的请求上下文,封装 `Request` 并提供 `getQuery/getParam/getBody/setHeader/setStatus/createResponse` 等方法 |
12
+ | `ContextService` | 用于在服务中访问请求上下文的服务,提供 `getContext()` 方法 |
11
13
  | `ResponseBuilder` | 提供 `json/text/html/empty/redirect/error/file` 便捷响应构建器 |
12
14
  | `RouteRegistry` / `Router` | 可直接注册函数式路由或获取底层 `Router` 进行手动控制 |
13
15
 
@@ -15,7 +17,7 @@
15
17
 
16
18
  - `@Controller(path)`:声明控制器前缀。
17
19
  - `@GET/@POST/@PUT/@PATCH/@DELETE(path)`:声明 HTTP 方法。
18
- - 参数装饰器:`@Body() / @Query(key) / @Param(key) / @Header(key)`。
20
+ - 参数装饰器:`@Body() / @Query(key) / @QueryMap() / @Param(key) / @Header(key) / @HeaderMap() / @Context()`。
19
21
  - `ControllerRegistry` 会自动解析装饰器并注册路由。
20
22
 
21
23
  ## 依赖注入
@@ -29,6 +31,7 @@
29
31
  - `Middleware` 类型:`(context, next) => Response`。
30
32
  - `MiddlewarePipeline`:`use`, `run`, `hasMiddlewares`, `clear`。
31
33
  - `@UseMiddleware(...middlewares)`:作用于控制器类或方法。
34
+ - `@RateLimit(options)`:限流装饰器,可用于控制器或方法。
32
35
  - 内置中间件:
33
36
  - `createLoggerMiddleware`
34
37
  - `createRequestLoggingMiddleware`
@@ -36,6 +39,7 @@
36
39
  - `createErrorHandlingMiddleware`
37
40
  - `createFileUploadMiddleware`
38
41
  - `createStaticFileMiddleware`
42
+ - `createRateLimitMiddleware`
39
43
 
40
44
  ## 验证
41
45
 
@@ -141,28 +145,464 @@ class UserController {
141
145
  `Application.registerWebSocketGateway` 时登记。
142
146
  - 服务器会自动处理握手并将事件委托给网关实例。
143
147
 
148
+ ## 数据库模块
149
+
150
+ - `DatabaseModule.forRoot(options)`:配置数据库连接(PostgreSQL、MySQL、SQLite)
151
+ - `DatabaseService`:`query()`、`initialize()`、`closePool()`、`healthCheck()`、`getConnectionInfo()`
152
+ - `DATABASE_SERVICE_TOKEN`:依赖注入的 Token
153
+
154
+ **示例**:
155
+
156
+ ```typescript
157
+ DatabaseModule.forRoot({
158
+ database: {
159
+ type: "postgres",
160
+ config: {
161
+ host: "localhost",
162
+ port: 5432,
163
+ database: "mydb",
164
+ user: "user",
165
+ password: "password",
166
+ },
167
+ },
168
+ });
169
+
170
+ @Injectable()
171
+ class UserService {
172
+ public constructor(
173
+ @Inject(DATABASE_SERVICE_TOKEN) private readonly db: DatabaseService,
174
+ ) {}
175
+
176
+ public async findUser(id: string) {
177
+ const result = await this.db.query("SELECT * FROM users WHERE id = $1", [
178
+ id,
179
+ ]);
180
+ return result[0];
181
+ }
182
+ }
183
+ ```
184
+
185
+ ## ORM 集成
186
+
187
+ - `@Entity(tableName)`:将类标记为数据库实体
188
+ - `@Column(options)`:定义列元数据
189
+ - `@PrimaryKey()`:将列标记为主键
190
+ - `@Repository(tableName, primaryKey)`:为实体创建仓库
191
+ - `BaseRepository<T>`:具有 CRUD 操作的基类仓库
192
+ - `DrizzleBaseRepository<T>`:Drizzle ORM 集成
193
+
194
+ **示例**:
195
+
196
+ ```typescript
197
+ @Entity("users")
198
+ class User {
199
+ @PrimaryKey()
200
+ @Column({ type: "INTEGER", autoIncrement: true })
201
+ public id!: number;
202
+
203
+ @Column({ type: "TEXT", nullable: false })
204
+ public name!: string;
205
+
206
+ @Column({ type: "TEXT", nullable: true })
207
+ public email?: string;
208
+ }
209
+
210
+ @Repository("users", "id")
211
+ class UserRepository extends DrizzleBaseRepository<User> {}
212
+
213
+ @Injectable()
214
+ class UserService {
215
+ public constructor(
216
+ @Inject(UserRepository) private readonly repo: UserRepository,
217
+ ) {}
218
+
219
+ public async findAll() {
220
+ return await this.repo.findAll();
221
+ }
222
+ }
223
+ ```
224
+
225
+ ## 事务支持
226
+
227
+ - `@Transactional(options?)`:声明方法为事务性
228
+ - `Propagation`:事务传播行为(REQUIRED、REQUIRES_NEW、SUPPORTS 等)
229
+ - `IsolationLevel`:事务隔离级别(READ_COMMITTED、REPEATABLE_READ 等)
230
+ - `TransactionManager`:手动管理事务
231
+
232
+ **示例**:
233
+
234
+ ```typescript
235
+ @Injectable()
236
+ class OrderService {
237
+ public constructor(
238
+ @Inject(DATABASE_SERVICE_TOKEN) private readonly db: DatabaseService,
239
+ ) {}
240
+
241
+ @Transactional({
242
+ propagation: Propagation.REQUIRED,
243
+ isolationLevel: IsolationLevel.READ_COMMITTED,
244
+ })
245
+ public async createOrder(orderData: OrderData) {
246
+ // 此方法中的所有数据库操作都在事务中运行
247
+ await this.db.query("INSERT INTO orders ...");
248
+ await this.db.query("INSERT INTO order_items ...");
249
+ // 如果任何操作失败,所有更改都会回滚
250
+ }
251
+ }
252
+ ```
253
+
254
+ ## 缓存模块
255
+
256
+ - `CacheModule.forRoot(options)`:配置缓存
257
+ - `CacheService`:`get()`、`set()`、`delete()`、`getOrSet()`、`clear()`
258
+ - `@Cacheable(key?, ttl?)`:缓存方法结果
259
+ - `@CacheEvict(key?)`:清除缓存条目
260
+ - `@CachePut(key?, ttl?)`:更新缓存条目
261
+ - `CACHE_SERVICE_TOKEN`:依赖注入的 Token
262
+
263
+ **示例**:
264
+
265
+ ```typescript
266
+ CacheModule.forRoot({
267
+ defaultTtl: 3600000, // 1 小时
268
+ });
269
+
270
+ @Injectable()
271
+ class ProductService {
272
+ public constructor(
273
+ @Inject(CACHE_SERVICE_TOKEN) private readonly cache: CacheService,
274
+ ) {}
275
+
276
+ @Cacheable("product", 60000)
277
+ public async getProduct(id: string) {
278
+ // 昂贵的数据库查询
279
+ return await this.db.query("SELECT * FROM products WHERE id = $1", [id]);
280
+ }
281
+
282
+ @CacheEvict("product")
283
+ public async updateProduct(id: string, data: ProductData) {
284
+ await this.db.query("UPDATE products ...");
285
+ }
286
+ }
287
+ ```
288
+
289
+ ## 队列模块
290
+
291
+ - `QueueModule.forRoot(options)`:配置任务队列
292
+ - `QueueService`:`add()`、`get()`、`delete()`、`clear()`、`count()`
293
+ - `@Queue(name, options?)`:注册任务处理器
294
+ - `@Cron(cronExpression, options?)`:注册定时任务
295
+ - `QUEUE_SERVICE_TOKEN`:依赖注入的 Token
296
+
297
+ **示例**:
298
+
299
+ ```typescript
300
+ QueueModule.forRoot({
301
+ defaultRetries: 3,
302
+ });
303
+
304
+ @Injectable()
305
+ class EmailService {
306
+ @Queue("send-email")
307
+ public async sendEmail(data: { to: string; subject: string }) {
308
+ // 发送邮件逻辑
309
+ }
310
+
311
+ @Cron("0 0 * * *") // 每天午夜
312
+ public async sendDailyReport() {
313
+ // 发送每日报告
314
+ }
315
+ }
316
+ ```
317
+
318
+ ## 会话模块
319
+
320
+ - `SessionModule.forRoot(options)`:配置会话管理
321
+ - `SessionService`:`create()`、`get()`、`set()`、`delete()`、`touch()`
322
+ - `createSessionMiddleware()`:创建会话中间件
323
+ - `@Session()`:在控制器中注入会话对象
324
+ - `SESSION_SERVICE_TOKEN`:依赖注入的 Token
325
+
326
+ **示例**:
327
+
328
+ ```typescript
329
+ SessionModule.forRoot({
330
+ secret: "your-secret-key",
331
+ maxAge: 3600000, // 1 小时
332
+ });
333
+
334
+ @Controller("/api/auth")
335
+ class AuthController {
336
+ public constructor(
337
+ @Inject(SESSION_SERVICE_TOKEN) private readonly session: SessionService,
338
+ ) {}
339
+
340
+ @POST("/login")
341
+ public async login(@Body() credentials: LoginDto, @Session() session: any) {
342
+ // Session 会自动注入
343
+ session.userId = credentials.userId;
344
+ return { success: true };
345
+ }
346
+ }
347
+ ```
348
+
349
+ ## 健康检查模块
350
+
351
+ - `HealthModule.forRoot(options)`:配置健康检查
352
+ - `HealthIndicator`:自定义健康检查指示器
353
+ - 自动提供 `/health` 和 `/ready` 端点
354
+
355
+ **示例**:
356
+
357
+ ```typescript
358
+ HealthModule.forRoot({
359
+ indicators: [
360
+ {
361
+ name: "database",
362
+ check: async () => {
363
+ const isHealthy = await dbService.healthCheck();
364
+ return { status: isHealthy ? "up" : "down" };
365
+ },
366
+ },
367
+ ],
368
+ });
369
+ ```
370
+
371
+ ## 指标模块
372
+
373
+ - `MetricsModule.forRoot(options)`:配置指标收集
374
+ - `MetricsCollector`:收集和暴露指标
375
+ - `PrometheusFormatter`:为 Prometheus 格式化指标
376
+ - `createHttpMetricsMiddleware()`:HTTP 指标中间件
377
+ - `METRICS_SERVICE_TOKEN`:依赖注入的 Token
378
+
379
+ **示例**:
380
+
381
+ ```typescript
382
+ MetricsModule.forRoot({
383
+ enableHttpMetrics: true,
384
+ });
385
+
386
+ @Injectable()
387
+ class OrderService {
388
+ public constructor(
389
+ @Inject(METRICS_SERVICE_TOKEN) private readonly metrics: MetricsCollector,
390
+ ) {}
391
+
392
+ public async createOrder() {
393
+ this.metrics.increment("orders.created");
394
+ // 创建订单逻辑
395
+ }
396
+ }
397
+ ```
398
+
399
+ ## 配置模块
400
+
401
+ - `ConfigModule.forRoot(options)`:配置管理
402
+ - `ConfigService`:`get()`、`set()`、`has()`、`getOrThrow()`
403
+ - `CONFIG_SERVICE_TOKEN`:依赖注入的 Token
404
+
405
+ **示例**:
406
+
407
+ ```typescript
408
+ ConfigModule.forRoot({
409
+ defaultConfig: { app: { name: "MyApp", port: 3000 } },
410
+ });
411
+
412
+ @Injectable()
413
+ class AppService {
414
+ public constructor(
415
+ @Inject(CONFIG_SERVICE_TOKEN) private readonly config: ConfigService,
416
+ ) {}
417
+
418
+ public getPort() {
419
+ return this.config.get<number>("app.port");
420
+ }
421
+ }
422
+ ```
423
+
144
424
  ## 请求工具
145
425
 
146
426
  - `BodyParser`:`parse(request)`,自动缓存解析结果。
147
- - `FileHandler`:解析 `multipart/form-data`,返回结构化文件对象。
148
427
  - `RequestWrapper`:用于兼容场景的轻量封装。
428
+ - `ResponseBuilder`:提供便捷的响应构建器。
149
429
 
150
- ## 导出入口
430
+ ## 文件处理
431
+
432
+ - `FileStorage`:文件存储服务,用于管理上传的文件。
433
+ - `createFileUploadMiddleware(options?)`:处理文件上传的中间件。
434
+ - `createStaticFileMiddleware(root, options?)`:提供静态文件服务的中间件。
435
+ - `UploadedFileInfo`:上传文件信息的类型定义。
436
+
437
+ ## 安全模块
151
438
 
152
- 所有上述 API 均可从 `src/index.ts` 导出,通过
153
-
154
- ```ts
155
- import {
156
- Application,
157
- Controller,
158
- createLoggerMiddleware,
159
- GET,
160
- HttpException,
161
- Injectable,
162
- UseMiddleware,
163
- Validate,
164
- WebSocketGateway,
165
- } from "@dangao/bun-server";
439
+ - `SecurityModule.forRoot(options)`:配置安全和认证
440
+ - `SecurityContextHolder`:访问当前安全上下文
441
+ - `AuthenticationManager`:管理认证
442
+ - `JwtAuthenticationProvider`:JWT 认证提供者
443
+ - `OAuth2AuthenticationProvider`:OAuth2 认证提供者
444
+ - `createSecurityFilter()`:创建安全过滤器中间件
445
+ - `RoleBasedAccessDecisionManager`:基于角色的访问控制
446
+
447
+ ## 守卫系统
448
+
449
+ - `@UseGuards(...guards)`:将守卫应用于控制器或方法
450
+ - `@Roles(...roles)`:要求特定角色
451
+ - `AuthGuard`:要求认证
452
+ - `OptionalAuthGuard`:可选认证
453
+ - `RolesGuard`:基于角色的授权守卫
454
+ - `createRolesGuard(options)`:创建自定义角色守卫
455
+ - `GuardRegistry`:守卫中央注册表
456
+ - `ExecutionContext`:守卫的执行上下文
457
+ - `Reflector`:元数据反射工具
458
+
459
+ **示例**:
460
+
461
+ ```typescript
462
+ @Controller("/api/users")
463
+ class UserController {
464
+ @GET("/profile")
465
+ @UseGuards(AuthGuard)
466
+ public getProfile() {
467
+ const context = SecurityContextHolder.getContext();
468
+ return context.getPrincipal();
469
+ }
470
+
471
+ @GET("/admin")
472
+ @UseGuards(AuthGuard, RolesGuard)
473
+ @Roles("admin")
474
+ public getAdmin() {
475
+ return { message: "Admin access" };
476
+ }
477
+ }
166
478
  ```
167
479
 
168
- 即可在应用中使用。
480
+ ## 事件模块
481
+
482
+ - `EventModule.forRoot(options?)`:配置事件系统
483
+ - `EventEmitterService`:事件发射器服务
484
+ - `@OnEvent(event, options?)`:注册事件监听器方法
485
+ - `EventListenerScanner`:扫描并注册事件监听器
486
+ - `EVENT_EMITTER_TOKEN`:依赖注入的 Token
487
+
488
+ **示例**:
489
+
490
+ ```typescript
491
+ EventModule.forRoot({
492
+ wildcard: true,
493
+ maxListeners: 20,
494
+ });
495
+
496
+ @Injectable()
497
+ class NotificationService {
498
+ public constructor(
499
+ @Inject(EVENT_EMITTER_TOKEN) private readonly eventEmitter: EventEmitter,
500
+ ) {}
501
+
502
+ @OnEvent('user.created')
503
+ public async handleUserCreated(data: { userId: string }) {
504
+ // 发送通知
505
+ }
506
+ }
507
+ ```
508
+
509
+ ## 微服务模块
510
+
511
+ ### 配置中心模块
512
+
513
+ - `ConfigCenterModule.forRoot(options)`:配置配置中心(Nacos、Consul 等)
514
+ - `CONFIG_CENTER_TOKEN`:依赖注入的 Token
515
+ - `NacosConfigCenter`:Nacos 实现
516
+
517
+ **示例**:
518
+
519
+ ```typescript
520
+ ConfigCenterModule.forRoot({
521
+ provider: 'nacos',
522
+ nacos: {
523
+ client: {
524
+ serverList: 'localhost:8848',
525
+ namespace: 'public',
526
+ },
527
+ },
528
+ });
529
+ ```
530
+
531
+ ### 服务注册中心模块
532
+
533
+ - `ServiceRegistryModule.forRoot(options)`:配置服务注册中心(Nacos、Consul 等)
534
+ - `SERVICE_REGISTRY_TOKEN`:依赖注入的 Token
535
+ - `NacosServiceRegistry`:Nacos 实现
536
+ - `@RegisterService(options)`:注册服务实例
537
+ - `@DiscoverService(serviceName)`:发现服务实例
538
+
539
+ **示例**:
540
+
541
+ ```typescript
542
+ ServiceRegistryModule.forRoot({
543
+ provider: 'nacos',
544
+ nacos: {
545
+ client: {
546
+ serverList: 'localhost:8848',
547
+ },
548
+ },
549
+ });
550
+
551
+ @Injectable()
552
+ class MyService {
553
+ @RegisterService({
554
+ serviceName: 'my-service',
555
+ ip: '127.0.0.1',
556
+ port: 3000,
557
+ })
558
+ public start() {
559
+ // 服务已注册
560
+ }
561
+ }
562
+ ```
563
+
564
+ ### 服务客户端
565
+
566
+ - `ServiceClient`:服务间通信客户端
567
+ - `@ServiceClient(serviceName, options?)`:注入服务客户端
568
+ - `@ServiceCall(method, path, options?)`:声明服务调用
569
+ - 负载均衡器:`RandomLoadBalancer`、`RoundRobinLoadBalancer`、`WeightedRoundRobinLoadBalancer`、`ConsistentHashLoadBalancer`、`LeastActiveLoadBalancer`
570
+ - 拦截器:`TraceIdRequestInterceptor`、`UserInfoRequestInterceptor`、`RequestLogInterceptor` 等
571
+
572
+ **示例**:
573
+
574
+ ```typescript
575
+ @Injectable()
576
+ class OrderService {
577
+ @ServiceClient('user-service')
578
+ private readonly userClient!: ServiceClient;
579
+
580
+ @ServiceCall('GET', '/users/:id')
581
+ public async getUser(id: string) {
582
+ return await this.userClient.call('GET', `/users/${id}`);
583
+ }
584
+ }
585
+ ```
586
+
587
+ ### 治理
588
+
589
+ - `CircuitBreaker`:熔断器模式实现
590
+ - `RateLimiter`:服务调用限流
591
+ - `RetryStrategyImpl`:重试策略实现
592
+
593
+ ### 链路追踪
594
+
595
+ - `Tracer`:分布式追踪
596
+ - `ConsoleTraceCollector`:基于控制台的追踪收集器
597
+ - `MemoryTraceCollector`:内存追踪收集器
598
+ - `SpanStatus`、`SpanKind`:Span 类型
599
+
600
+ ### 监控
601
+
602
+ - `ServiceMetricsCollector`:服务调用指标收集
603
+ - `ServiceCallMetrics`:指标数据结构
604
+ - `ServiceInstanceHealth`:健康检查数据
605
+
606
+ ## 导出入口
607
+
608
+ 所有上述 API 均可从 `src/index.ts` 导出。完整的 API 列表请参考 `src/index.ts`。
@@ -85,11 +85,13 @@ import {
85
85
  createFileUploadMiddleware, // 文件上传
86
86
  createLoggerMiddleware, // 请求日志
87
87
  createRequestLoggingMiddleware, // 详细请求日志
88
+ createRateLimitMiddleware, // 限流
88
89
  createStaticFileMiddleware, // 静态文件服务
89
90
  } from "@dangao/bun-server";
90
91
 
91
92
  app.use(createLoggerMiddleware({ prefix: "[App]" }));
92
93
  app.use(createCorsMiddleware({ origin: "https://example.com" }));
94
+ app.use(createRateLimitMiddleware({ windowMs: 60000, max: 100 }));
93
95
  app.use(createStaticFileMiddleware({ root: "./public", prefix: "/assets" }));
94
96
  ```
95
97
 
@@ -390,6 +392,57 @@ class UserController {
390
392
  - **可验证**:`validate(config)` 钩子可集成 class-validator 风格校验
391
393
  - **无侵入**:示例中(`basic-app.ts` / `full-app.ts` / `multi-module-app.ts` / `auth-app.ts`)均通过 `ConfigModule` 管理端口、日志前缀等配置
392
394
 
395
+ #### EventModule(事件系统)
396
+
397
+ EventModule 提供了强大的事件驱动架构:
398
+
399
+ ```typescript
400
+ import {
401
+ EventModule,
402
+ OnEvent,
403
+ EVENT_EMITTER_TOKEN,
404
+ Injectable,
405
+ Inject,
406
+ Module,
407
+ } from "@dangao/bun-server";
408
+ import type { EventEmitter } from "@dangao/bun-server";
409
+
410
+ // 配置事件模块
411
+ EventModule.forRoot({
412
+ wildcard: true,
413
+ maxListeners: 20,
414
+ });
415
+
416
+ @Injectable()
417
+ class NotificationService {
418
+ @OnEvent("user.created")
419
+ public handleUserCreated(payload: { userId: string }) {
420
+ console.log("用户已创建:", payload);
421
+ }
422
+ }
423
+
424
+ @Module({
425
+ imports: [EventModule],
426
+ providers: [NotificationService],
427
+ })
428
+ class AppModule {}
429
+ ```
430
+
431
+ #### 其他官方模块
432
+
433
+ 框架还提供了以下模块:
434
+
435
+ - **CacheModule**:缓存功能,支持 `@Cacheable`、`@CacheEvict`、`@CachePut` 装饰器
436
+ - **QueueModule**:任务队列,支持 `@Queue` 和 `@Cron` 装饰器
437
+ - **SessionModule**:会话管理,支持 `@Session` 装饰器
438
+ - **HealthModule**:健康检查,自动提供 `/health` 和 `/ready` 端点
439
+ - **MetricsModule**:指标收集,支持 Prometheus 格式
440
+ - **DatabaseModule**:数据库连接和 ORM 集成
441
+ - **ConfigCenterModule**:配置中心(Nacos、Consul 等)
442
+ - **ServiceRegistryModule**:服务注册与发现(Nacos、Consul 等)
443
+
444
+ 这些模块的详细文档请参阅 [API 概览](./api.md)。
445
+
393
446
  ### 完整示例
394
447
 
395
448
  ```typescript