高瀬博道の技術ブログ

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

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

前回

takasehiromichiex.com

コントローラのリダイレクト

コントローラでリダイレクトさせるには、@Redirect()デコレータを使用します。

@Redirect()デコレータは、urlとstatusCodeを引数に取りますが、どちらも必須ではありません。

statusCodeを省略した場合は、302が返却されます。

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

@Controller('cats')
export class CatsController {
    @Get('abc*')
    @Redirect('https://nestjs.com', 301)    
    hello(): string {
        return 'hello!';
    }

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

helloメソッドに、@Redirect('https://nestjs.com', 301)デコレータを追加しました。

この状態で、postmanGET localhost:3000/cats/abcにリクエストを送ると、https://nestjs.com にリダイレクトされます。

ルーティングパラメータ

GET /cats/1のように、ルーティングの中で動的にパラメータを取得したい場合は、ルーティングデコレータの引数に、パラメータトークンを使用します。

パラメータトークンで取得した値には、@param()デコレータでアクセスすることができます。

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

@Controller('cats')
export class CatsController {
    @Get(':id')
    hello(@Param() params): string {
        return `ID is ${params.id}`;
    }
}

helloメソッドのルーティングデコレータの引数にパラメータトークンを、helloメソッド自体の引数に@Param()デコレータを追加しました。

この状態で、postmanGET localhost:3000/cats/1にリクエストを送ると、以下の通り返却されます。

ID is 1

@Param()デコレータの引数にパラメータトークン名を渡すことで、そのまま引数としてパラメータトークンを受け取ることもできます。

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

@Controller('cats')
export class CatsController {
    @Get(':id')
    hello(@Param('id') id: string): string {
        return `ID is ${id}`;
    }
}

@Param()デコレータの引数に、idというパラメータトークン名を渡しました。

この状態で、postmanGET localhost:3000/cats/1にリクエストを送ると、以下の通り返却されます。

ID is 1

まとめ

ここまでで、

  • コントローラのルーティングにおけるリダイレクト
  • コントローラの動的なパラメータの取得

について学びました。

次回は、プロバイダについて掘り下げていこうと思います。

コード

今回のコードは、以下に格納しました。

github.com

takasehiromichiex.com