はじめに
この記事では、NestJS の Controller でクライアントリクエストを受け取る際の実装方法について記載します。
開発環境
開発環境は以下の通りです。
- Windows11
- VSCode
- Node.js 20.5.0
- NestJS 10.0.0
- TypeScript 5.1.3
事前準備
以下の手順に沿って、NestJS をインストールします。
次に以下の記載内容に沿って、コントローラー用のクラスを作成します。
リクエストオブジェクトの受け取り
@Req()
デコレーターをメソッドの引数に指定することで、リクエストオブジェクトを受け取ることができます。
app.controller.ts
import { Controller, Get, Req } from '@nestjs/common';
import { Request } from 'express';
@Controller('controllers')
export class AppController {
@Get('request-object/:param')
getRequestObject(@Req() request: Request): string {
return `RequestObjectController returns path param: ${JSON.stringify(
request.params,
)}, query param: ${JSON.stringify(request.query)}`;
}
}
上記の例では、リクエストオブジェクトを受け取り、その中からパスパラメーターとクエリパラメーターを取り出しています。
リクエストオブジェクトから取り出すことのできるプロパティについては、こちらに記載があります。
クエリパラメーターの受け取り
リクエストオブジェクトを受け取るのではなく、その中の特定のプロパティを受け取ることもできます。
@Query(key?: string)
デコレーターをメソッドの引数に指定することで、クエリパラメーターを受け取ることができます。
app.controller.ts
import { Controller, Get, Query } from '@nestjs/common';
@Controller('controllers')
export class AppController {
@Get('query-parameters')
getQueryParameters(@Query() param: string): string {
return `QueryParametersController returns param: ${JSON.stringify(param)}`;
}
}
リクエストボディの受け取り
@Body(key?: string)
デコレーターをメソッドの引数に指定することで、リクエストボディを受け取ることができます。
app.controller.ts
import { Body, Controller, Post } from '@nestjs/common';
@Controller('controllers')
export class AppController {
@Post('request-body')
postRequestBody(@Body() body: string): string {
return `RequestBodyController returns body: ${JSON.stringify(body)}`;
}
}