NestJS Controller詳解:処理するさまざまなHTTPリクエストメソッドおよびルートパラメータ

NestJSは、効率的かつスケーラブルなNode.jsサーバーサイドアプリケーションを構築するためのフレームワークです。Controllerは、NestJSの重要な構成要素であり、受信するHTTPリクエストを処理してレスポンスを返します。本文では、NestJSでControllerを作成し、さまざまなHTTPリクエストメソッド(GET、POST、PUT、DELETEなど)を処理する方法、およびルートパラメータやリクエストボディを使用する方法を詳しく説明します。

Controllerの概要

Controllerは、アプリケーション内のルートを定義し、受信リクエストを処理するために使用されます。各Controllerは、一連の関連するリクエストを処理し、通常は特定のリソース(ユーザー、記事など)に関連付けられます。NestJSでは、Controllerはデコレーターとクラスメソッドを使用して定義されます。

Controllerの作成

NestJSでは、Controllerは@Controller()デコレーターを使用して定義されます。以下は、簡単なControllerの例です:

1
import { Controller, Get } from "@nestjs/common";
2
3
@Controller("users")
4
export 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でこれらのリクエストメソッドを処理する方法を示しています:

1
import {
2
Controller,
3
Get,
4
Post,
5
Put,
6
Delete,
7
Param,
8
Body,
9
} from "@nestjs/common";
10
11
@Controller("users")
12
export 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()デコレーターを使用してルートパラメータを取得できます。以下はその例です:

1
import { Controller, Get, Param } from "@nestjs/common";
2
3
@Controller("users")
4
export 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()デコレーターを使用してリクエストボディを取得できます。以下はその例です:

1
import { Controller, Post, Body } from "@nestjs/common";
2
3
class CreateUserDto {
4
readonly name: string;
5
readonly age: number;
6
}
7
8
@Controller("users")
9
export 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クラスを定義し、ユーザー作成リクエストのデータをカプセル化しています:

1
class CreateUserDto {
2
readonly name: string;
3
readonly age: number;
4
}

ルートパラメータおよびリクエストボディの型制約

TypeScriptの型制約を使用することで、ルートパラメータおよびリクエストボディのデータ型を正確にすることができます。以下は、ルートパラメータおよびリクエストボディを使用する総合的な例です:

1
import { Controller, Get, Post, Put, Param, Body } from "@nestjs/common";
2
3
class UpdateUserDto {
4
readonly name: string;
5
readonly age: number;
6
}
7
8
@Controller("users")
9
export 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など)を処理する方法、およびルートパラメータやリクエストボディを使用する方法を紹介しました。