NestJS Controller詳解:処理するさまざまなHTTPリクエストメソッドおよびルートパラメータ
- 1180単語
- 6分
- 08 Jul, 2024
NestJSは、効率的かつスケーラブルなNode.jsサーバーサイドアプリケーションを構築するためのフレームワークです。Controllerは、NestJSの重要な構成要素であり、受信するHTTPリクエストを処理してレスポンスを返します。本文では、NestJSでControllerを作成し、さまざまなHTTPリクエストメソッド(GET、POST、PUT、DELETEなど)を処理する方法、およびルートパラメータやリクエストボディを使用する方法を詳しく説明します。
Controllerの概要
Controllerは、アプリケーション内のルートを定義し、受信リクエストを処理するために使用されます。各Controllerは、一連の関連するリクエストを処理し、通常は特定のリソース(ユーザー、記事など)に関連付けられます。NestJSでは、Controllerはデコレーターとクラスメソッドを使用して定義されます。
Controllerの作成
NestJSでは、Controllerは@Controller()
デコレーターを使用して定義されます。以下は、簡単なControllerの例です:
1import { Controller, Get } from "@nestjs/common";2
3@Controller("users")4export class UsersController {5 @Get()6 findAll() {7 return "This action returns all users";8 }9}
上記の例では、UsersController
クラスを定義し、@Controller('users')
デコレーターを使用してControllerとしてマークし、そのルートプレフィックスをusers
に設定しています。findAll
メソッドは、@Get()
デコレーターを使用してGETリクエストを処理するようにマークされています。
さまざまなHTTPリクエストメソッドの処理
NestJSのControllerは、GET、POST、PUT、DELETEなどのさまざまなHTTPリクエストメソッドを処理できます。以下の例では、Controllerでこれらのリクエストメソッドを処理する方法を示しています:
1import {2 Controller,3 Get,4 Post,5 Put,6 Delete,7 Param,8 Body,9} from "@nestjs/common";10
11@Controller("users")12export class UsersController {13 @Get()14 findAll() {15 return "This action returns all users";16 }17
18 @Get(":id")19 findOne(@Param("id") id: string) {20 return `This action returns user with id ${id}`;21 }22
23 @Post()24 create(@Body() createUserDto: CreateUserDto) {25 return "This action adds a new user";26 }27
28 @Put(":id")29 update(@Param("id") id: string, @Body() updateUserDto: UpdateUserDto) {30 return `This action updates user with id ${id}`;31 }32
33 @Delete(":id")34 remove(@Param("id") id: string) {35 return `This action removes user with id ${id}`;36 }37}
上記の例では、以下のようにさまざまなHTTPリクエストメソッドを処理するメソッドを定義しています:
findAll
は、すべてのユーザーを返すGETリクエストを処理します。findOne
は、ルートパラメータを含むGETリクエストを処理し、特定のユーザーを返します。create
は、新しいユーザーを作成するPOSTリクエストを処理します。update
は、ルートパラメータを含むPUTリクエストを処理し、特定のユーザーを更新します。remove
は、ルートパラメータを含むDELETEリクエストを処理し、特定のユーザーを削除します。
ルートパラメータの使用
ルートパラメータは、URL内でパラメータを渡すために使用されます。NestJSでは、@Param()
デコレーターを使用してルートパラメータを取得できます。以下はその例です:
1import { Controller, Get, Param } from "@nestjs/common";2
3@Controller("users")4export class UsersController {5 @Get(":id")6 findOne(@Param("id") id: string) {7 return `This action returns user with id ${id}`;8 }9}
上記の例では、findOne
メソッドが@Get(':id')
デコレーターを使用して、ルートパラメータid
を含むGETリクエストを処理します。@Param('id')
デコレーターを使用して、ルートパラメータid
の値を取得しています。
リクエストボディの使用
リクエストボディは、通常POSTおよびPUTリクエストでデータを渡すために使用されます。NestJSでは、@Body()
デコレーターを使用してリクエストボディを取得できます。以下はその例です:
1import { Controller, Post, Body } from "@nestjs/common";2
3class CreateUserDto {4 readonly name: string;5 readonly age: number;6}7
8@Controller("users")9export class UsersController {10 @Post()11 create(@Body() createUserDto: CreateUserDto) {12 return `This action adds a new user with name ${createUserDto.name} and age ${createUserDto.age}`;13 }14}
上記の例では、create
メソッドが@Post()
デコレーターを使用してPOSTリクエストを処理します。@Body()
デコレーターを使用して、リクエストボディ内のデータを取得し、CreateUserDto
型を使用して型を制約しています。
パラメータの詳解
@Controller()
:Controllerを定義し、ルートプレフィックスを指定するために使用されます。@Get()
、@Post()
、@Put()
、@Delete()
:さまざまなHTTPリクエストメソッドを処理するルートを定義するために使用されます。@Param()
:ルートパラメータを取得するために使用されます。@Body()
:リクエストボディを取得するために使用されます。
DTO(データ転送オブジェクト)
DTOは、リクエストデータをカプセル化するために使用されるオブジェクトです。上記の例では、CreateUserDto
クラスを定義し、ユーザー作成リクエストのデータをカプセル化しています:
1class CreateUserDto {2 readonly name: string;3 readonly age: number;4}
ルートパラメータおよびリクエストボディの型制約
TypeScriptの型制約を使用することで、ルートパラメータおよびリクエストボディのデータ型を正確にすることができます。以下は、ルートパラメータおよびリクエストボディを使用する総合的な例です:
1import { Controller, Get, Post, Put, Param, Body } from "@nestjs/common";2
3class UpdateUserDto {4 readonly name: string;5 readonly age: number;6}7
8@Controller("users")9export class UsersController {10 @Get(":id")11 findOne(@Param("id") id: string) {12 return `This action returns user with id ${id}`;13 }14
15 @Post()16 create(@Body() createUserDto: CreateUserDto) {17 return `This action adds a new user with name ${createUserDto.name} and age ${createUserDto.age}`;18 }19
20 @Put(":id")21 update(@Param("id") id: string, @Body() updateUserDto: UpdateUserDto) {22 return `This action updates user with id ${id}, new name ${updateUserDto.name}, new age ${updateUserDto.age}`;23 }24}
まとめ
本文では、NestJSのControllerについて詳しく説明し、さまざまなHTTPリクエストメソッド(GET、POST、PUT、DELETEなど)を処理する方法、およびルートパラメータやリクエストボディを使用する方法を紹介しました。