Nestjs公式ドキュメントモジュール


Modules


モジュールは@Modules()Decoratorを使用して起動できます.
@Module Decoratorは、メタデータを提供することによってアプリケーション構造を作成します.

各アプリケーションには少なくとも1つ(rootmodule)があります.
モジュールパッケージの使用が望ましい
  • プロバイダ(プロバイダはインスタントでモジュール内を移動)
  • .
  • コントローラ(コントローラは本モジュールで定義、インスタンス化)
  • imports(インポートモジュールはエクスポートプロバイダがこのモジュールを必要とすることを示す)
  • exports(プロバイダのサブセットとして、データレコーダを使用するモジュールが提供するプロバイダの一部をエクスポートし、他のモジュールからインポートすることができる).
    既に存在します.
  • nestjsは基本的にモジュールをパッケージしています.インポートされたモジュールにエクスポートされていないプロバイダを直接含めることはできません.モジュールからエクスポートされたproviderは、モジュールの共通インタフェースまたはapiと見なすことができます.
    登録後、最後にするのはルートモジュールにモジュールを登録することです.
    単例なので、モジュール間で簡単に共有できます
    import { Module } from '@nestjs/common';
    import { CatsController } from './cats.controller';
    import { CatsService } from './cats.service';
    
    @Module({
      controllers: [CatsController],
      providers: [CatsService],
      exports: [CatsService]
    })
    export class CatsModule {}
    モジュールエクスポートプロセス
    module re-exporting
    @Module({
      imports: [CommonModule],
      exports: [CommonModule],
    })
    export class CoreModule {}
    これにより、CommonModuleをインポートした直後にCommonModuleをエクスポートすることもできます.
    import { Module } from '@nestjs/common';
    import { CatsController } from './cats.controller';
    import { CatsService } from './cats.service';
    
    @Module({
      controllers: [CatsController],
      providers: [CatsService],
    })
    export class CatsModule {
      constructor(private catsService: CatsService) {}
    }
    モジュールでは、コンストラクション関数にproviderを書き込むこともできます.
    ただし、モジュール自体は、ループ参照を阻止するために、モジュールをプロバイダとして登録することはできません.
    Angularは基本的にproviderはグローバル状態で使用できるが,Nestはパッケージ化に重点を置いているため,グローバル状態で使用するには@globalを加える必要がある.
    この場合は1回しか使用できないため、通常root moduleにグローバルステータスを登録します.
    Dybamic Module
    カスタムモジュールを作成できます.プロバイダの動的登録を許可します.
    import { Module, DynamicModule } from '@nestjs/common';
    import { createDatabaseProviders } from './database.providers';
    import { Connection } from './connection.provider';
    
    @Module({
      providers: [Connection],
    })
    export class DatabaseModule {
      static forRoot(entities = [], options?): DynamicModule {
        const providers = createDatabaseProviders(options, entities);
        return {
          global:false
          module: DatabaseModule,
          providers: providers,
          exports: providers,
        };
      }
    }
    単純なダイナミックモジュールの例
    モジュール内で静的メソッドを使用してforRootを作成し、モジュール、プロバイダ、およびエクスポートに戻るメソッドで動的に作成します.
    この場合のforRootメソッドはasync、sync
    グローバル可用性の設定も可能
    import { Module } from '@nestjs/common';
    import { DatabaseModule } from './database/database.module';
    import { User } from './users/entities/user.entity';
    
    @Module({
      imports: [DatabaseModule.forRoot([User])],
      exports: [DatabaseModule],
    })
    export class AppModule {}
    re-exportは同じ部分で実現できます
    ダイナミックモジュールを再エクスポートする場合は、forRootのみをエクスポートできます.
    ここです。