模块
原创...大约 2 分钟
模块是用 @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