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