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 |