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など)を処理する方法、およびルートパラメータやリクエストボディを使用する方法を紹介しました。
 
   
  