配置项模块

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

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

点击查看代码
import { Module, Global } from '@nestjs/common';
import { CatsController } from './cats.controller';
import { CatsService } from './cats.service';

@Global()
@Module({
  controllers: [CatsController],
  providers: [CatsService],
  exports: [CatsService],
})
export class CatsModule {}

模块

可选提供器#
有时,你可能有不一定要解决的依赖。例如,你的类可能依赖于配置对象,但如果没有传递任何内容,则应使用默认值。在这种情况下,依赖变为可选,因为缺少配置提供程序不会导致错误。

要指示提供器是可选的,请在构造函数的签名中使用 @Optional() 装饰器。

点击查看代码
import { Injectable, Optional, Inject } from '@nestjs/common';

@Injectable()
export class HttpService<T> {
  constructor(@Optional() @Inject('HTTP_OPTIONS') private httpClient: T) {}
}

Nest 模块系统包含一个称为动态模块的强大功能。此功能使你能够轻松创建可自定义的模块,这些模块可以动态注册和配置提供程序。此处 广泛介绍了动态模块。在本章中,我们将给出一个简短的概述来完成对模块的介绍

点击查看代码
import { Module, DynamicModule } from '@nestjs/common';
import { createDatabaseProviders } from './database.providers';
import { Connection } from './connection.provider';

@Module({
  providers: [Connection],
  exports: [Connection],
})
export class DatabaseModule {
  static forRoot(entities = [], options?): DynamicModule {
    const providers = createDatabaseProviders(options, entities);
    return {
      module: DatabaseModule,
      providers: providers,
      exports: providers,
    };
  }
}
forRoot() 方法可以同步或异步(即通过 Promise)返回动态模块。

模块的使用和配置全局以及导出和引入
服务装饰器默认值配置
动态模块搭配(自定义配置)传递服务提供注入参数传递

posted @ 2024-08-05 21:36  jialiangzai  阅读(21)  评论(0)    收藏  举报