メインコンテンツまでスキップ

3. Controllers

コントローラーの役割

コントローラーは、HTTPリクエストを処理し、クライアントにレスポンスを返す役割を担います。各コントローラーは特定のルートをハンドリングし、適切なサービスを呼び出してレスポンスを生成します。コントローラーは、リクエストパラメータの検証、データの変換、エラーハンドリングなどを行います。

基本的な使用方法

以下は基本的なコントローラーの例です:

import { Controller, Get, Post, Body, Param } from '@nestjs/common';
import { CatsService } from './cats.service';
import { CreateCatDto } from './create-cat.dto';

@Controller('cats')
export class CatsController {
constructor(private readonly catsService: CatsService) {}

@Post()
async create(@Body() createCatDto: CreateCatDto) {
this.catsService.create(createCatDto);
}

@Get()
async findAll(): Promise<Cat[]> {
return this.catsService.findAll();
}

@Get(':id')
async findOne(@Param('id') id: string): Promise<Cat> {
return this.catsService.findOne(id);
}
}

デコレーター

  • @Controller('cats'):コントローラーのルートを定義します。この場合、すべてのルートは cats プレフィックスを持ちます。
  • @Get():HTTP GETリクエストをハンドリングします。
  • @Post():HTTP POSTリクエストをハンドリングします。
  • @Body():リクエストのボディからデータを取得します。
  • @Param('id'):リクエストパラメータからデータを取得します。

依存性注入

コントローラー内でサービスを利用するために、コンストラクタで依存性注入を行います。Nest.jsは、デフォルトで依存性注入(DI)コンテナを提供し、サービスやリポジトリなどの依存性を自動的に解決します。

constructor(private readonly catsService: CatsService) {}

サービスの呼び出し

コントローラー内でサービスを呼び出し、ビジネスロジックを処理します。以下の例では、CatsServiceを利用して、データの作成、取得、検索を行います。

@Post()
async create(@Body() createCatDto: CreateCatDto) {
this.catsService.create(createCatDto);
}

@Get()
async findAll(): Promise<Cat[]> {
return this.catsService.findAll();
}

@Get(':id')
async findOne(@Param('id') id: string): Promise<Cat> {
return this.catsService.findOne(id);
}

ルートの定義

コントローラー内でルートを定義し、対応するHTTPメソッドにマッピングします。以下の例では、@Get()デコレーターを使用して、HTTP GETリクエストを /cats ルートにマッピングしています。

@Get()
async findAll(): Promise<Cat[]> {
return this.catsService.findAll();
}

また、ルートパラメータを使用して特定のリソースを取得することもできます。以下の例では、@Get(':id')デコレーターを使用して、特定のIDを持つリソースを取得しています。

@Get(':id')
async findOne(@Param('id') id: string): Promise<Cat> {
return this.catsService.findOne(id);
}

コントローラーは、アプリケーションのエンドポイントを定義し、リクエストを処理する主要な役割を担います。次のセクションでは、サービスの作成と使用について説明します。