推荐答案
什么是 NestJS 模块?
NestJS 模块是应用程序的基本构建块,用于组织应用程序的结构。每个模块都是一个带有 @Module() 装饰器的类,它定义了模块的元数据,包括控制器、提供者、导入的其他模块以及导出的提供者。
如何创建和使用模块?
- 创建模块:使用
@Module()装饰器定义一个模块类,并指定其元数据。 - 注册模块:在应用程序的主模块(通常是
AppModule)中导入新创建的模块。 - 使用模块:通过依赖注入在控制器或服务中使用模块中定义的提供者。
本题详细解读
NestJS 模块的核心概念
- 控制器 (Controllers):处理传入的 HTTP 请求并返回响应。
- 提供者 (Providers):通常是服务类,用于封装业务逻辑。
- 导入 (Imports):导入其他模块,以便在当前模块中使用它们的提供者。
- 导出 (Exports):导出当前模块的提供者,以便其他模块可以使用。
创建模块的步骤
定义模块类:
// www.javascriptcn.com code example import { Module } from '@nestjs/common'; import { CatsController } from './cats.controller'; import { CatsService } from './cats.service'; @Module({ controllers: [CatsController], providers: [CatsService], }) export class CatsModule {}注册模块:
import { Module } from '@nestjs/common'; import { CatsModule } from './cats/cats.module'; @Module({ imports: [CatsModule], }) export class AppModule {}使用模块中的提供者:
// www.javascriptcn.com code example import { Controller, Get } from '@nestjs/common'; import { CatsService } from './cats.service'; @Controller('cats') export class CatsController { constructor(private readonly catsService: CatsService) {} @Get() findAll(): string { return this.catsService.findAll(); } }
模块的导出与共享
导出提供者:通过
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 {}