Nest.jsで複数のParamを指定する方法

プログラミング
  • Nest.jsではRouter Parametersを使用して、URLのパス情報から@Param() decoratorを使用して、欲しい値を取得することができる。この@Param()を使って、複数の値を取得する方法を記載する。

Paramに1つだけ値を設定する方法

  • Paramから1つの値だけを取得する方法
@Controller('cats')
export class CatController {
  @Get(':catId')
  getCat(@Param() param): string {
    const { catId } = param;
    return catId;
  }
}
  • 名前を付けて、Paramから1つの値だけを取得する方法

@Paramの引数に取得するパラメータを記載すると、catIdをparamの中から取得せずに使えるようになる

@Controller('cats')
export class CatController {
  @Get(':catId')
  getCat(@Param('catId') catId: string): string {
    return catId;
  }
}

Paramに複数の値を設定する方法

  • @Getの引数だけに分けて、パラメーターを記述する
@Controller('cats')
export class CatController {
  @Get(':catId/dogs/:dogId')
  getCat(@Param() param): string {
    const { catId, dogId } = param;
    return catId;
  }
}

## もしくは
@Controller('cats')
export class CatController {
  @Get(':catId/dogs/:catId')
  getCat(@Param('catId') catId: string, @Param('dogId') dogId: string): string {
    console.log(catId);
    console.log(dogId);
    return catId;
  }
}
  • @Controllerと@Getの引数に分けて、パラメータを記述する
@Controller('cats/:catId/dogs')
export class CatController {
  @Get(':dogId')
  getCat(@Param() param): string {
    const { catId, dogId } = param;
    return catId;
  }
}

## もしくは
@Controller('cats/:catId/dogs')
export class CatController {
  @Get(':catId')
  getCat(@Param('catId') catId: string, @Param('dogId') dogId: string): string {
    console.log(catId);
    console.log(dogId);
    return catId;
  }
}

まとめ

Nest.jsの場合、Router Parametersに複数のパラメータを直感的に記載できる。
ただ、@Param('catId') catId: string みたいな書き方でパラメータを追加していくとき、メソッドの引数があふれそうな気がする。というより、パラメータに指定するようなリソースがそんなにある場合、設計を見直した方がいいような気もする。。