前回
コントローラ
コントローラは、アプリケーションに対する特定の要求を受け取ります。コントローラは、複数のルーティングを持ちます。
src/cats/cats.controller.ts
を編集してみましょう。
src/cats/cats.controller.ts
import { Controller, Get } from '@nestjs/common'; @Controller('cats') export class CatsController { @Get() hello(): String { return "hello!"; } }
まず、@Get()
デコレータを追加しました。 (HTTPリクエストメソッドデコレータ)
これで、このコントローラはGetリクエストを受け付けるようになります。
HTTPリクエストメソッドデコレータには引数を与えていないので、ルートパスに対応します。
ルートパスは、@Controller('cats')
から、/cats
になり、@Get()
から、/cats/
になります。
npm run start
または、npm run start:dev
を実行してから、postman
で、GET localhost:3000/cats
を呼ぶと、以下のように返却されます。
hello!
@Controller()
の引数の文字列によって、そのコントローラにおけるルーティングのプレフィックスをつけることができます。
@Get()
の引数の文字列によって、そのメソッドにおけるルーティングのパスを指定することができます。
@Get()
の引数ありのバージョンも作成してみましょう。
src/cats/cats.controller.ts
import { Controller, Get } from '@nestjs/common'; @Controller('cats') export class CatsController { @Get() hello(): String { return "hello!"; } @Get('goodbye') goodbye(): String { return "goodbye!"; } }
postmanで、GET localhost:3000/cats/goodbye
を呼ぶと、以下のように返却されます。
goodbye!
コントローラでリクエストを受け取る
メソッドで、リクエストを受け取れるようにします。
src/cats/cats.controller.ts
import { Controller, Get, Req } from '@nestjs/common'; import { Request } from 'express'; @Controller('cats') export class CatsController { @Get() hello(@Req() request: Request): Request { return request; } @Get('goodbye') goodbye(): String { return "goodbye!"; } }
hello
メソッドの引数に、@Req() request: Request
を追加しました。
これで、hello
メソッドが呼ばれた際のリクエストを取得できます。
しかし、ほとんどの場合、request
をそのまま使うことはありません。
そのため、以下のデコレータを使用することができます。
- @Request(), @Req()
- req
- @Response(), @Res()
- res
- @Next()
- next
- @Session()
- req.session
- @Param(key?: string)
- req.params / req.params[key]
- @Body(key?: string)
- req.body / req.body[key]
- @Query(key?: string)
- req.query / req.query[key]
- @Ip()
- req.ip
- @HostParam()
- req.hosts
まとめ
ここまでで、
- コントローラのルーティングプレフィックス
- コントローラのルーティングパス
- コントローラのリクエストデコレータ
を学びました。
次回は、コントローラをより掘り下げようと思います。
コード
現時点のコードは以下に格納しました。