推荐答案
什么是 NestJS 模块?
NestJS 模块是应用程序的基本构建块,用于组织应用程序的结构。每个模块都是一个带有 @Module()
装饰器的类,它定义了模块的元数据,包括控制器、提供者、导入的其他模块以及导出的提供者。
如何创建和使用模块?
- 创建模块:使用
@Module()
装饰器定义一个模块类,并指定其元数据。 - 注册模块:在应用程序的主模块(通常是
AppModule
)中导入新创建的模块。 - 使用模块:通过依赖注入在控制器或服务中使用模块中定义的提供者。
本题详细解读
NestJS 模块的核心概念
- 控制器 (Controllers):处理传入的 HTTP 请求并返回响应。
- 提供者 (Providers):通常是服务类,用于封装业务逻辑。
- 导入 (Imports):导入其他模块,以便在当前模块中使用它们的提供者。
- 导出 (Exports):导出当前模块的提供者,以便其他模块可以使用。
创建模块的步骤
定义模块类:
-- -------------------- ---- ------- ------ - ------ - ---- ----------------- ------ - -------------- - ---- -------------------- ------ - ----------- - ---- ----------------- --------- ------------ ----------------- ---------- -------------- -- ------ ----- ---------- --
注册模块:
import { Module } from '@nestjs/common'; import { CatsModule } from './cats/cats.module'; @Module({ imports: [CatsModule], }) export class AppModule {}
使用模块中的提供者:
-- -------------------- ---- ------- ------ - ----------- --- - ---- ----------------- ------ - ----------- - ---- ----------------- ------------------- ------ ----- -------------- - ------------------- -------- ------------ ------------ -- ------ ---------- ------ - ------ --------------------------- - -
模块的导出与共享
导出提供者:通过
exports
数组导出模块中的提供者,使其在其他模块中可用。@Module({ providers: [CatsService], exports: [CatsService], }) export class CatsModule {}
共享模块:通过导出提供者,其他模块可以导入并使用这些提供者。
@Module({ imports: [CatsModule], }) export class AppModule {}
模块的依赖注入
- 依赖注入:NestJS 使用依赖注入机制自动解析模块中的提供者,并将其注入到控制器或其他服务中。
constructor(private readonly catsService: CatsService) {}
模块的全局作用域
- 全局模块:通过
@Global()
装饰器将模块标记为全局模块,使其提供者在整个应用程序中可用。@Global() @Module({ providers: [CatsService], exports: [CatsService], }) export class CatsModule {}