前回
モジュールについて
まずモジュールは、main.tsのbootstrapで、NestFactory.create(AppModule)
で、ルートモジュールとして利用します。
機能モジュール
特定の機能に関連するコードを整理し、明確な境界を確立するようです。
CLIを使用してモジュールを作成してみます。
$ nest g module cats
以下のファイルが作成されました。
src/cats/cats.module.ts
import { Module } from '@nestjs/common'; @Module({}) export class CatsModule {}
必要最低限のモジュールが作成されたようです。
機能モジュールとして機能させるために、コントローラとサービスも作成してみます。
コントローラの作成
CLIを使用してコントローラを作成します。
$ nest g controller cats
以下のファイルが作成されました。
src/cats/cats.controller.ts
import { Controller } from '@nestjs/common'; @Controller('cats') export class CatsController {}
src/cats/cats.controller.spec.ts
import { Test, TestingModule } from '@nestjs/testing'; import { CatsController } from './cats.controller'; describe('CatsController', () => { let controller: CatsController; beforeEach(async () => { const module: TestingModule = await Test.createTestingModule({ controllers: [CatsController], }).compile(); controller = module.get<CatsController>(CatsController); }); it('should be defined', () => { expect(controller).toBeDefined(); }); });
また、src/cats/cats.module.ts
も自動的に更新されたようです。
src/cats/cats.module.ts
import { Module } from '@nestjs/common'; import { CatsController } from './cats.controller'; @Module({ controllers: [CatsController] }) export class CatsModule {}
コントローラがモジュールに自動的に追加されています。
サービスも作成してみましょう。
サービスの作成
サービスは、プロバイダの一種です。
プロバイダには、サービス、リポジトリ、ファクトリ、ヘルパーなどがあります。
CLIを使用してサービスを作成します。
$ nest g service cats
以下のファイルが作成されました。
src/cats/cats.service.ts
import { Injectable } from '@nestjs/common'; @Injectable() export class CatsService {}
src/cats/cats.service.spec.ts
import { Test, TestingModule } from '@nestjs/testing'; import { CatsService } from './cats.service'; describe('CatsService', () => { let service: CatsService; beforeEach(async () => { const module: TestingModule = await Test.createTestingModule({ providers: [CatsService], }).compile(); service = module.get<CatsService>(CatsService); }); it('should be defined', () => { expect(service).toBeDefined(); }); });
また、src/cats/cats.module.ts
も自動的に更新されたようです。
src/cats/cats.module.ts
import { Module } from '@nestjs/common'; import { CatsController } from './cats.controller'; import { CatsService } from './cats.service'; @Module({ controllers: [CatsController], providers: [CatsService] }) export class CatsModule {}
サービスがモジュールに自動的に追加されています。
ルートモジュール
ルートモジュールも自動的に更新されるようです。
src/app.module.ts
import { Module } from '@nestjs/common'; import { AppController } from './app.controller'; import { AppService } from './app.service'; import { CatsModule } from './cats/cats.module'; @Module({ imports: [CatsModule], controllers: [AppController], providers: [AppService], }) export class AppModule {}
作成したモジュールが、importsとしてルートモジュールに追加されています。
まとめ
ここまでで、
- CLIを使用した機能モジュールの作成
- CLIを使用したコントローラの作成
- CLIを使用したサービスの作成
を行いました。
次回は、コントローラをもっと掘り下げようと思います。
コード
現時点のコードは以下に格納しました。