Dev Study
NestJS コース

4. ルートパラメータと @Param

GET /users/123 のように URL の一部が可変になる場合は、@Get(":id") とコロン付きでパスを宣言します。ハンドラの引数に @Param("id") を付けると、その位置の値を受け取れます。

実務では「ID を指定して1件取得・更新・削除する」エンドポイントで毎回使う、最頻出のデコレータです。:id と @Param("id") の名前を一致させる、というルールだけ覚えれば書けます。

つまずきポイントは型です。URL から取れる値は常に string なので、@Param("id") id: number と書いても数値にはなりません。数値への変換は後のレッスンで学ぶ仕組みで行うため、ここでは「@Param は文字列で受け取る」と覚えておきましょう。

サンプルコード(フレームワーク環境が必要なため表示のみ)

import { Controller, Get, Param } from "@nestjs/common";

@Controller("users")
export class UsersController {
  @Get(":id") // GET /users/123 のような URL
  findOne(@Param("id") id: string) {
    // id には "123" が入る(常に string)
    return { id, name: "Alice" };
  }

  @Get(":id/posts/:postId") // パラメータは複数置ける
  findPost(
    @Param("id") id: string,
    @Param("postId") postId: string,
  ) {
    return { id, postId };
  }
}
公式ドキュメントで詳しく ↗