別のモジュールからの Nest.js サービスの挿入

別のモジュールからの Nest.js サービスの挿入
あなたのような読者が MUO をサポートします。当社サイトのリンクを使用して商品を購入すると、アフィリエイト手数料が発生する場合があります。 続きを読む。

別の Nest.js モジュールからサービスを挿入するには、依存関係の挿入とモジュールの構成を適切に行うためのいくつかの手順が必要です。 2 つのサンプル モジュールを使用して、サービスのエクスポートとインポートのプロセスがどのように機能するかを学びます。





今日のMUOビデオ スクロールしてコンテンツを続けてください

Nest.js プロジェクトの生成

Nest.js プロジェクトを生成するには、デバイスに CLI がインストールされている必要があります。インストールしていない場合は、次のコマンドを実行してインストールします。





 npm install -g @nestjs/cli 

Nest.js CLI がインストールされている場合、次のコマンドを実行して新しい Nest.js プロジェクトを生成します。





 nest new <project-name> 

」は任意の名前に置き換えることができます。上記のコマンドを実行すると、指定した名前で新しい Nest.js プロジェクトが生成されます。

現在のプロジェクト構造は以下の画像のようになっているはずです。



  Nest.js 定型ファイルの構造

あるモジュールから別のモジュールにサービスを注入する練習をするには、2 つのモジュール module-a と module-b を生成します。また、対応するサービス ファイルとコントローラー ファイルも生成します。

次のコマンドを実行して module-a を生成します。





 nest generate module module-a 

そして、module-b に対して同等のコマンドを実行します。

 nest generate module module-b 

次に、次のコマンドを実行して、モジュール a のサービス ファイルとコントローラー ファイルを生成します。





 nest generate service module-a && nest generate controller module-a 

そして、module-b に対して同等のコマンドを実行します。

 nest generate service module-b && nest generate controller module-b 

現在のプロジェクト ディレクトリは次のようになります。 src/モジュール-a そして src/モジュール-b ディレクトリ:

  生成されたモジュール、サービス、コントローラーを含む Nest.js ファイル構造

モジュール A からのサービスのエクスポート

module-a モジュールから module-a サービスをエクスポートするには、それを module-a のモジュール ファイルにエクスポートとしてリストする必要があります ( モジュール-a.module.ts )。デフォルトでは、Nest.js CLI は 輸出 の配列 @モジュール デコレータを使用するため、生成されるモジュール ファイルは次のようになります。

 // module-a.module.ts 
import { Module } from '@nestjs/common';
import { ModuleAService } from './module-a.service';
import { ModuleAController } from './module-a.controller';

@Module({
  providers: [ModuleAService],
  controllers: [ModuleAController],
})

export class ModuleAModule {}

サービスを作成するには ( モジュール-a.service.ts ) module-a をインポートするモジュールにアクセスでき、 輸出 の配列 @モジュール デコレータと追加 モジュールAサービス それに。

そのようです:

iPhoneからビデオを共有する方法
 import { Module } from '@nestjs/common'; 
import { ModuleAService } from './module-a.service';
import { ModuleAController } from './module-a.controller';

@Module({
  providers: [ModuleAService],
  controllers: [ModuleAController],
  exports: [ModuleAService],
})

export class ModuleAModule {}

次に、テスト目的で、モジュール (サービス ファイル) に簡単な関数を追加します。 モジュール-a.service.ts ):

 import { Injectable } from '@nestjs/common'; 

@Injectable()
export class ModuleAService {
  getHello(): string {
    return 'Hello from Module A!';
  }
}

この関数はサンプル文字列を返します。このサービスを正しくインポートできることを確認するには、service-a を挿入した後に module-b からその関数を呼び出します。

サービスをモジュール B にインポートする

あるモジュールを別のモジュールにインポートするには、そのモジュールをインポートとしてリストする必要があります。 輸入品 受信モジュールの配列。この場合、モジュール a を 輸入品 module-b の配列 @モジュール デコレーター。

以前と同様、Nest.js CLI は自動的に 輸入品 配列なので、手動で追加する必要があります。

まず、親モジュールをインポートします( モジュール-a.module.ts ) 受信モジュール ( モジュール-b.module.ts )、を作成します。 輸入品 配列して追加します モジュールAモジュール 配列に:

 // module-b.module.ts 
import { Module } from '@nestjs/common';
import { ModuleBController } from './module-b.controller';
import { ModuleBService } from './module-b.service';
import { ModuleAModule } from '../module-a/module-a.module';

@Module({
  imports: [ModuleAModule],
  controllers: [ModuleBController],
  providers: [ModuleBService],
})

export class ModuleBModule {}

次に、 モジュール-b.service.ts ファイルを作成してインポートする 注入する デコレータと モジュールAサービス から @ネスト/共通 そして ../モジュール-a/モジュール-a.service 、 それぞれ:

 import { Injectable, Inject } from '@nestjs/common'; 
import { ModuleAService } from '../module-a/module-a.service';

注入する デコレータは、そのパラメータを依存関係注入のターゲットとしてマークします。

次に、あなたの モジュールBサービス クラスに、以下のコード ブロックを追加します。

Windows10用の無料メールアプリ
 @Inject(ModuleAService) 
  private readonly moduleAService: ModuleAService;

上記のコード ブロックにより、ModuleBService が ModuleAService で使用できるメソッドにアクセスできるようになります。

ModuleAService を呼び出すことでサービスをテストできます。 こんにちは 方法。

 // module-b.service.ts 
import { Injectable, Inject } from '@nestjs/common';
import { ModuleAService } from 'src/module-a/module-a.service';

@Injectable()
export class ModuleBService {
  @Inject(ModuleAService)
  private readonly moduleAService: ModuleAService;

  getHello(): string {
    return this.moduleAService.getHello();
  }
}

次に、 module-b.controller.ts ファイルを開き、生成されたコードを以下のコード ブロックに置き換えます。

 // module-b.controller.ts 
import { Controller, Get } from '@nestjs/common';
import { ModuleBService } from './module-b.service';

@Controller('module-b')
export class ModuleBController {
  constructor(private readonly moduleBService: ModuleBService) {}

  @Get('/hello')
  getHello(): string {
    return this.moduleBService.getHello();
  }
}

上記のコード ブロックは、 得る のルートハンドラ こんにちは 関数。

ついに、 カールでGETリクエストを行う ローカルホスト:3000/module-b/hello に送信します。このコマンドは「Hello from Module A!」を出力するはずです。コンソールに。

サービスを別のモジュールに正常に挿入しました。こんなときに便利です。 Nest.js を使用した API の構築 相互にメソッドを呼び出す必要がある複数のモジュールがあります。

クロスモジュールインジェクションの利点

別のモジュールからサービスを直接呼び出すことは、最初は簡単に見えるかもしれませんが、長期的にはシステムがより複雑になり、保守性や拡張性が低下する可能性があります。

ただし、クロスモジュール インジェクションによりコードのモジュール性と再利用性が促進され、保守が容易になります。さらに、依存関係を一元化し、テスト容易性を向上させ、スケーラブルで分離されたアーキテクチャをサポートします。