はじめに
Nest.jsを触る機会があるものの基礎を理解せず触っていたため、よくわかっていない部分を再確認していきます。今回はModuleについて。
Moduleとは
関連する機能をグループ化し、アプリケーションの構造を整理するための単位。
各アプリケーションには少なくとも1つのルートモジュールがあり、依存関係の解決の開始点となる。一般的には、複数のモジュールを使用して機能を整理・呼び出す。
定義方法
@Module()
を使って定義する。@Module()
は1つのオブジェクト(モジュールの設定を記述したプロパティを持っている)を受け取る。
-
providers
: Nest injector によってインスタンス化され、Module 内で共有される -
controllers
: Module で定義された Controller -
imports
: Module で使用する Provider をエクスポートしている他の Module -
exports
: Module 内で定義された Provider を他の Module で利用できるようにするための設定
種類
モジュールにはいくつかの種類があるのでまとめていく。
機能モジュール
特定の機能やドメインに関連するコードをグループ化したモジュール。
import { Module } from '@nestjs/common';
import { CatsController } from './cats.controller';
import { CatsService } from './cats.service';
@Module({
controllers: [CatsController],
providers: [CatsService],
})
export class CatsModule {}
共有モジュール
アプリケーション全体で共有される共通のプロバイダーやサービスを含むモジュール。
import { Module } from '@nestjs/common';
import { CatsController } from './cats.controller';
import { CatsService } from './cats.service';
@Module({
controllers: [CatsController],
providers: [CatsService],
exports: [CatsService] // CatsModuleをimportするとCatsServiceを使えるようになる
})
export class CatsModule {}
グローバルモジュール
アプリケーション全体で自動的に利用可能になるモジュール。
app.module.ts等、1度だけ登録すればimportしなくてもグローバルモジュールのプロバイダにアクセスできる。
import { Module, Global } from '@nestjs/common';
import { CatsController } from './cats.controller';
import { CatsService } from './cats.service';
@Global() // これをつけるとグローバルモジュールになる
@Module({
controllers: [CatsController],
providers: [CatsService],
exports: [CatsService], // CatsServiceがimportしなくてもアクセスできるようになる
})
export class CatsModule {}
参考