[TIL]NestJS勉強5日目

3683 ワード

Module


モジュールの基本的な説明


モジュールは、@Moduleデータレコーダを使用して、Nest組織アプリケーションの構造にメタデータを提供します.
各アプリケーションには少なくとも1つのモジュールがあります.

モジュールパラメータ


  • ≪プロバイダ|Provider|emdw≫:最近のインジェクタによってインスタンス化され、インスタンスはモジュールで最も共有されません.

  • ≪コントローラ|Controller|emdw≫:モジュールで定義されたインスタンス化が必要なコントローラのセット.

  • imports:インポートされたモジュールのリスト.このリストのモジュールは、デザイナに使用されているモジュールから必要なプロバイダをエクスポートする必要があります.

  • exports:プロバイダのサブセットで、データレコーダを使用するモジュールが提供するプロバイダの一部をエクスポートできます.これは、他のモジュールからインポートするときに使用されます.
  • モジュールタイプ


    Feature Module


    特定の単位のモジュールとしても解釈され、feature moduleは、特定の特徴に関連するコードを単純に整理する.したがって,コードは組織的であり,明確な境界を確立することによって複雑さを低減する.
    import { Module } from '@nestjs/common';
    import { CatsController } from './cats.controller';
    import { CatsService } from './cats.service';
    
    @Module({
      controllers: [CatsController],
      providers: [CatsService],
    })
    export class CatsModule {}
    上記コードを記述するためには、terminalnest g module catsを記述するだけでよい.
    app.moduleは、importによってモジュールを利用可能に変換する.

    Shared Module


    1つのモジュールしかないので、任意のProviderインスタンスまたは複数のモジュールで共有することができる.
    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 {}
    名前の通り、共有はこの目的を達成するために行われるので、このモジュールを共有することで、CatsServiceをどこでも使用できます.

    Global Module

    @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 {}
    このように、CatsModuleを使用すれば、どこでもCatsServiceを使用することができる.

    Dynamic Module


    動的モジュールは、providersを動的に設定および登録できるカスタマイズ可能なモジュールを作成することができる.
    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 {
                module: DatabaseModule,
                providers,
                exports: providers
            }
        }
    }
    上のコードを見て、このように値を動的に変更することができます.しかしこの場合、価格はoverrideではなく、extendである.つまり、いくつかの値が増加します.

    モジュール付加機能


    Module re-exporting

    @Module({
      imports: [CommonModule],
      exports: [CommonModule],
    })
    export class CoreModule {}
    上記の例に示すように、モジュールのインポート後に再エクスポートできます.

    注入依存

    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) {}
    }
    ジェネレータを作成できます.