跳至主要內容

模块

刘春龙原创...大约 2 分钟NodejsNestjs教程文档

模块是用 @Module() 装饰器注释的类。 @Module() 装饰器提供 Nest 用来组织应用结构的元数据。

每个应用至少有一个模块,一个 根模块。 根模块是 Nest 用来构建 应用图 的起点 - Nest 用来解析模块和提供者关系和依赖的内部数据结构。 虽然非常小的应用理论上可能只有根模块,但这不是典型的情况。 我们要强调的是,strongly 推荐使用模块作为组织组件的有效方式。 因此,对于大多数应用,最终的架构将采用多个模块,每个模块封装一组密切相关的 capabilities。

@Module() 装饰器采用单个对象,其属性描述模块:

相关属性说明
providers将由 Nest 注入器实例化并且至少可以在该模块中共享的提供程序
controllers此模块中定义的必须实例化的控制器集
imports导出此模块所需的提供程序的导入模块列表
exports这个模块提供的 providers 的子集应该在导入这个模块的其他模块中可用。 你可以使用提供者本身或仅使用其令牌(provide 值)

这是我们之前生成的user.module.ts文件

import { Module } from '@nestjs/common';
import { UserService } from './user.service';
import { UserController } from './user.controller';

@Module({
  controllers: [UserController],
  providers: [UserService]
})
export class UserModule {}

我们之所以能够访问该user模块,是因为在全局的app.module.ts文件里进行了导入

import { Module } from '@nestjs/common';
import { AppController } from './app.controller';
import { AppService } from './app.service';
import { UserModule } from './modules/user/user.module';

@Module({
  imports: [UserModule],
  controllers: [AppController],
  providers: [AppService],
})
export class AppModule { }

 




 




依赖注入

模块类也可以 inject 提供者(例如,出于配置目的):

import { Module,Dependencies } from '@nestjs/common';
import { UserService } from './user.service';
import { UserController } from './user.controller';

@Module({
  controllers: [UserController],
  providers: [UserService]
})
@Dependencies(UserService)
export class UserModule {
    constructor(userService) {
    this.userService = userService;
  }
}

全局模块

如果你必须在所有地方导入相同的模块集,它会变得乏味。 与 Nest 不同,Angularproviders 是在全局作用域内注册的。 一旦定义,它们随处可用。 然而,Nest 将提供程序封装在模块作用域内。 如果不首先导入封装模块,则无法在其他地方使用模块的提供程序。

当你想提供一组开箱即用的提供程序时(例如,助手、数据库连接等),请使用 @Global() 装饰器制作模块 global

import { Module,Global } from '@nestjs/common';
import { UserService } from './user.service';
import { UserController } from './user.controller';

@Global()
@Module({
  controllers: [UserController],
  providers: [UserService]
})
export class UserModule {}

@Global() 装饰器使模块具有全局作用域。 全局模块应注册为 只有一次,一般由根或核心模块注册。 在上面的示例中,UserService 提供程序将无处不在,希望注入服务的模块将不需要在其导入数组中导入 UserModule

上次编辑于:
贡献者: 刘春龙
评论
  • 按正序
  • 按倒序
  • 按热度
Powered by Waline v2.15.7