NestJSモジュール(module)

2839 ワード

モジュール


NestJS公式サイトによると、モジュールは@Module()台のコーディネーターによって注釈されたクラスである.@Module()デコーダは、アプリケーション構造を構成するメタデータを提供する.
一般的に、モジュールは、1つの小さなクラスまたは関数のように1つのことしか実行しないソフトウェアコンポーネントではなく、複数のコンポーネントを組み合わせて作成されたより大きなタスクを実行するユニットである.すなわち、他の複数のモジュールからなるルートモジュールが存在する.写真のように、Appモジュールで、ルートモジュールの形態に向かいます.
理論的には、ルートモジュールが1つしか存在しないことは可能であるが、Nestは機能別にモジュールを分割して使用することを追求している.モジュール分割の使用理由は,複数のモジュールがそれぞれの責任を分担し,凝集力を向上させるためである.
import { CatsModule } from './cats/cats.module';
import { Module } from '@nestjs/common';
import { AppController } from './app.controller';
import { AppService } from './app.service';
import { UsersModule } from './users/users.module';

@Module({
  imports: [CatsModule, UsersModule],
  controllers: [AppController],
  providers: [AppService],
})
export class AppModule {}
app.module.tsファイル(ルートモジュール)から見ると、こんなに多くのモジュールが導入されています.では、CatsModuleおよびUsersModule出口のサービスは、AppControllerまたはAppServiceで使用することができる.ただし、これらのモジュールはエクスポートされた状態でなければなりません.エクスポートがない場合、パッケージはモジュールのベンダー(サービス)に注入できません.

🌼 CLIによるモジュールの作成

$ nest g <schematic> <name> [options]
買収は多くのSchemicをもたらす可能性があります.(注:https://docs.nestjs.com/cli/usages)Schemicの1つはmoduleです.$ nest g module 모듈명を生成することができる.モジュール名に制限はありませんが、公式サイトではマルチモデルなので、マルチモデルの方が良い選択(?)そうかどうか考えています.
コマンドを使用せずに1つずつ入力してモジュールを作成できますが、$ nest g module CLIメソッドを使用してモジュールを作成すると、app.module.tsファイルに作成したモジュールが自動的にインポートされます.

🌼 パッケージングモジュール


モジュールは基本的にベンダーをカプセル化しています.モジュールから導出されたプロバイダは、モジュールの公開インタフェースまたはAPIと見なすことができる.(1)現在のモジュールの一部ではないか,(2)導入したモジュールにエクスポートされていない仕入先は注入できない.
import { Module } from '@nestjs/common';
import { CatsController } from './cats.controller';
import { CatsService } from './cats.service';

@Module({
  controllers: [CatsController],
  providers: [CatsService],
  exports: [],
  // exports: [CatsService], 으로 변경해야 사용 가능
})
export class CatsModule {}
上のコードはcat.module.tsファイルのモジュールコードです.CatsService名のサプライヤーがいますが、まだ輸出されていません.この場合、ルートモジュール(app.module.ts)から導入されても、そのベンダーは使用できません.カプセル化されているので近づけません.モジュールを使用するためには、出口CatsServiceが必要である.