- 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
みたいな書き方でパラメータを追加していくとき、メソッドの引数があふれそうな気がする。というより、パラメータに指定するようなリソースがそんなにある場合、設計を見直した方がいいような気もする。。