NestJS 模块指南

NestJS 模块系统:功能模块、共享模块、动态模块、Provider 和模块化应用架构。

1. 功能模块

@Module({
  imports: [
    TypeOrmModule.forFeature([Article]),
    UsersModule,
  ],
  controllers: [ArticlesController],
  providers: [ArticlesService],
  exports: [ArticlesService],
})
export class ArticlesModule {}

2. 共享模块

@Global()
@Module({
  providers: [
    LoggerService,
    {
      provide: 'REDIS_CLIENT',
      useFactory: async (cfg: ConfigService) => {
        const client = createClient({ url: cfg.get('REDIS_URL') });
        await client.connect();
        return client;
      },
      inject: [ConfigService],
    },
  ],
  exports: [LoggerService, 'REDIS_CLIENT'],
})
export class CommonModule {}

3. 动态模块

@Module({})
export class MailerModule {
  static registerAsync(asyncOptions: {
    useFactory: (...args: any[]) => MailerOptions | Promise<MailerOptions>;
    inject?: any[];
  }): DynamicModule {
    return {
      module: MailerModule,
      providers: [
        { provide: 'MAILER_OPTIONS', useFactory: asyncOptions.useFactory, inject: asyncOptions.inject ?? [] },
        MailerService,
      ],
      exports: [MailerService],
    };
  }
}

4. 模块元数据属性

属性作用
imports导入其他模块(访问其 exports)
controllers本模块的路由控制器
providers服务、守卫、管道、拦截器
exports暴露给其他模块的 providers