未経験からのNestJS入門|サービス

サービスとは

コントローラーはルーティングを制御しますが、サービスはルーティングされたリクエストの処理を行います。

作成したサービスは、app.module.ts ファイルのプロバイダーに登録することで、コントローラーでサービスの定義を行えます。

また、サービスの動作確認を行うにはコントローラーの作成が必須です。コントローラーの作成方法がわからない場合は、『未経験からの NestJS 入門|コントローラー』を確認してください。

サービスの作成

Nest.js には、Nest CLI という非常に便利なコマンドラインツールがあります。これを使用することで、サービスファイル・サービステストファイル・プロバイダーの登録を全て自動的に行うことができます。

以下のコマンドを実行すると、user ディレクトリにサービスファイルとサービステストファイルが追加されます。

nest g s users

実行すると user ディレクトリにサービスファイルとサービステストファイルが追加されます。

src/
└── users/
    ├── users.service.spec.ts
    └── users.service.ts

app.module.ts を確認してください。プロバイダーの登録も自動的に行われているかと思います。

// /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';  ← CLI 実行時に自動登録

@Module({
imports: [],
controllers: [AppController, UsersController],
providers: [AppService, UsersService],←   CLI 実行時に自動登録
})
export class AppModule {}

サービスファイルを編集して、ルーティング後の処理を追記していきます。以下は、単純に “users” の文字列を返すサービスの例です。

// /src/users/users.service.ts

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

@Injectable()
export class UsersService {
  getUser(): string {
    return 'users';
  }
}

呼び出し元のコントローラーも修正します。UserController にサービスの依存性注入を行い、ルーティング時にサービスを読み込むようにしています。

// /src/users/users.controller.ts

import { Controller, Get } from '@nestjs/common';
import { UsersService } from './users.service';

@Controller('users')
export class UsersController {
  constructor(private readonly usersService: UsersService) {}

  @Get()
  getUser(): string {
    return this.usersService.getUser();
  }
}

これでサービス作成は完了しました。

試しにhttp://localhost:3000/usersアクセスしてください。サービスが実行され、user 文字列が出力されるはずです。

最後に

簡単なサービスを作成し、コントローラーに依存性注入して動作確認まで行いました。 今回作成したコードは、GitHub リポジトリできるので、興味があれば実行して試してみてください。

次に『未経験からの NestJS 入門|モジュール』からモジュールの作成方法について勉強します。