未経験からのNestJS入門|モジュール
概要
コントローラーやサービスはそれぞれ役割を持っており、数が増えてくると構造が複雑化してしまいます。
それを解決するためにモジュール化という概念があります。
Nest.js アプリケーションには、ルートモジュールが必ず含まれており、それに紐づく形で、モジュールが作成されます。
モジュールの作成方法
モジュールを作成する最も簡単な方法は、Nest CLI を使うことです。
以下コマンドでモジュールディレクトリに user.module.ts を作成し、
ルートモジュールに、user.module.ts を追加してくれます。
nest generate module users
// /src/app.module.ts
import { Module } from '@nestjs/common';
import { AppController } from './app.controller';
import { AppService } from './app.service';
import { UsersController } from './users/users.controller';
import { UsersService } from './users/users.service';
import { UsersModule } from './users/users.module'; ← CLI 実行時に自動追加
@Module({
imports: [UsersModule], ← CLI 実行時に自動追加
controllers: [AppController, UsersController],
providers: [AppService, UsersService],
})
export class AppModule {}
// /src/users/users.module.ts
import { Module } from '@nestjs/common';
@Module({})
export class UsersModule {}
モジュールの設定
前回、『未経験からの NestJS 入門|コントローラー』『未経験からの NestJS 入門|サービス』で users コントローラーと users サービスを作成し、 さらに今回、user モジュールを作成した結果、app.module.ts が以下のようになっています。
// /src/app.module.ts
import { Module } from '@nestjs/common';
import { AppController } from './app.controller';
import { AppService } from './app.service';
import { UserController } from './controller/user/user.controller';
import { UserService } from './service/user/user.service';
import { UserModule } from './module/user/user.module';
@Module({
imports: [UserModule],
controllers: [AppController, UserController],
providers: [AppService, UserService],
})
export class AppModule {}
このままではルートモジュールにユーザーサービスとユーザーコントロールが存在していて見通しが悪いため、この設定をユーザーモジュールに移動させます。
// /src/users/users.module.ts
import { Module } from '@nestjs/common';
import { UsersController } from './users.controller';
import { UsersService } from './users.service';
@Module({
imports: [],
controllers: [UsersController],
providers: [UsersService],
})
export class UsersModule {}
// /src/app.module.ts
import { Module } from '@nestjs/common';
import { AppController } from './app.controller';
import { AppService } from './app.service';
import { UsersModule } from "./users/users.module";
@Module({
imports: [UsersModule],
controllers: [AppController],
providers: [AppService],
})
export class AppModule {}
このようにモジュールを利用すると、必要な機能をひとまとめにすることができソース管理が煩雑にならずに済みます。
終わりに
次に NestJS の便利な機能であるミドルウェアについて解説します。 こちらを参考にしてください。