高瀬博道の技術ブログ

高瀬博道の技術ブログです。

もう2023年になったので、今さらNestJSに入門しようと思う - その4

前回

takasehiromichiex.com

コントローラ

POSTを受け取るメソッドも定義してみましょう。

src/cats/cats.controller.ts
import { Controller, Get, Post } from '@nestjs/common';

@Controller('cats')
export class CatsController {
    @Get()
    hello(): string {
        return 'hello!';
    }

    @Post()
    create(): string {
        return 'this is create method!';    
    }
}

postman で、POST localhost:3000/catsを呼ぶと、以下のように返却されます。

this is create method!

以下の通り、HTTPメソッドデコレータが提供されています。

  • @Get()
  • @Post()
  • @Put()
  • @Delete()
  • @Patch
  • @Options()
  • @Head()
  • @All()

ルーティングにおけるワイルドカードの使用

ルーティングパスはワイルドカードもサポートしています。

src/cats/cats.controller.ts
import { Controller, Get, Post } from '@nestjs/common';

@Controller('cats')
export class CatsController {
    @Get('abc*')
    hello(): string {
        return 'hello!';
    }

    @Post()
    create(): string {
        return 'this is create method!';    
    }
}

helloメソッドのGetデコレータを、@Get('abc*')に変更しました。

これは、以下のいずれも実行することができます。

  • GET localhost:3000/cats/abc
  • GET localhost:3000/cats/abcd
  • GET localhost:3000/cats/abcde

カスタムステータスコード

レスポンスステータスコードはデフォルトで200、POSTリクエストは201ですが、この動作を変更することができます。

src/cats/cats.controller.ts
import { Controller, Get, HttpCode, Post } from '@nestjs/common';

@Controller('cats')
export class CatsController {
    @Get('abc*')
    @HttpCode(418)
    hello(): string {
        return 'hello!';
    }

    @Post()
    create(): string {
        return 'this is create method!';    
    }
}

helloメソッドに、@HttpCode(418)デコレータを追加しています。

この状態で、GET localhost:3000/cats/abcを呼ぶと、以下のレスポンスが、HTTPレスポンスコード 418で返却されます。

hello!

カスタムレスポンスヘッダ

カスタムレスポンスヘッダを付与することができます。

src/cats/cats.controller.ts
import { Controller, Get, Header, HttpCode, Post } from '@nestjs/common';

@Controller('cats')
export class CatsController {
    @Get('abc*')
    @HttpCode(418)
    @Header('Cache-Control', 'none')
    hello(): string {
        return 'hello!';
    }

    @Post()
    create(): string {
        return 'this is create method!';    
    }
}

helloメソッドに、@Header('Cache-Control', 'none')デコレータを追加しています。

この状態で、GET localhost:3000/cats/abcを呼ぶと、key: Cache-Controlvalue: noneのレスポンスヘッダが乗った状態の以下のレスポンスが、HTTPレスポンスコード 418で返却されます。

hello!

まとめ

ここまでで、

  • POSTや他のメソッドを受け付けるコントローラの書き方
  • ルーティングにワイルドカードを使用したコントローラの書き方
  • カスタムステータスコードを返却するコントローラの書き方
  • カスタムレスポンスヘッダを乗せるコントローラの書き方

を学びました。

次も、もう少しだけコントローラを掘り下げようと思います。

コード

コードは以下に格納しました。

github.com

takasehiromichiex.com