[Nestjs] Webアプリの基本 コントローラーを実装する
概要
NestjsでHTTPリクエストを捌くコントローラーを作成する
以下の項目を考慮する
- HTTPメソッドのルーティング
- 正常処理時のレスポンス
- 異常処理時のレスポンス
ルーティングと正常処理
Nestjsのコントローラーはデコレーターパターン(@で始まる)で機能を追加していく
以下ではGet /practiceを処理するためのコントローラーを作成している
[リクエスト]
クラスに@Contoller(path_name)をデコレートする事でパス /path_naneを拾うコントローラーが作成できる
そのクラスのメソッドに@Getをデコレートすることでhttpメソッド Getを拾って処理するハンドラが作成できる
メソッドの引数に@Query()を追加することでクエリストリングを拾う
他にも@BodyでBodyを扱うこともできる
以下のソースコードではtypeというクエリストリングを拾い,変数typeに割り当てている
[レスポンス]
メソッド内でnumberやstringなどのプリミティブ型をreturnするとそのままボディに入れてレスポンスを返す
また、javascriptオブジェクトをreturnすると, 自動的にJSONに変換してレスポンスボディに詰めて返す
以下のコントローラーのソースコードをnestjsモジュールに登録して実行すれば、以下のリンクにアクセスして動作を確認できる
import { Controller, Get, Query } from '@nestjs/common';
@Controller('practice')
export class AppController {
@Get()
getHello(@Query('type') type: string) {
if (type === 'number') {
return 123456789;
}
if (type === 'string') {
return 'hoge moge poge';
}
if (type === 'object') {
return {
hoge: 'hoge',
moge: 'moge',
poge: 'poge',
};
}
}
}
異常処理
以下では、例外処理の方法を実装する
正常時はreturnでレスポンスを返していたが、例外はthrowすることでレスポンスを返す
Nestjsでは例外用のクラスも用意されていて@nestjs/commonからimportし、400を返したいときはBadRequestException, 404を返したいときはNotFoundException, 自分で例外を作りたいときはHttpExceptionを使って作ることができる
以下のコントローラーのソースコードをnestjsモジュールに登録して実行すれば、以下のリンクにアクセスして動作を確認できる
import { Controller, Get, Query, HttpException, NotFoundException, BadRequestException, HttpStatus } from '@nestjs/common';
@Controller('practice')
export class AppController {
@Get()
getHello(@Query('code') code: string) {
if (code === '400') {
throw new BadRequestException();
}
if (code === '404') {
throw new NotFoundException()
}
if (code === '500') {
throw new HttpException('Internal Server Error', HttpStatus.INTERNAL_SERVER_ERROR)
}
}
}
Discussion