推荐答案
在 Nest.js 中,路由参数可以通过在路由路径中使用冒号 (:) 来定义,并在控制器方法中使用 @Param() 装饰器来获取。
// www.javascriptcn.com code example
import { Controller, Get, Param } from '@nestjs/common';
@Controller('users')
export class UsersController {
@Get(':id')
findOne(@Param('id') id: string): string {
return `This action returns a user with ID ${id}`;
}
}在这个例子中,:id 是一个路由参数,@Param('id') 用于获取该参数的值。
本题详细解读
1. 路由参数的定义
在 Nest.js 中,路由参数是通过在路由路径中使用冒号 (:) 来定义的。例如,:id 表示一个名为 id 的路由参数。当客户端请求匹配该路由时,Nest.js 会自动提取路径中的参数值。
2. 获取路由参数
为了在控制器方法中获取路由参数,可以使用 @Param() 装饰器。@Param() 装饰器可以接受一个参数,用于指定要获取的路由参数的名称。如果不传递参数,@Param() 将返回一个包含所有路由参数的对象。
@Get(':id')
findOne(@Param('id') id: string): string {
return `This action returns a user with ID ${id}`;
}在这个例子中,@Param('id') 用于获取 id 参数的值,并将其传递给 findOne 方法。
3. 多个路由参数
如果路由路径中有多个参数,可以分别使用 @Param() 装饰器来获取每个参数,或者使用一个对象来获取所有参数。
@Get(':id/:name')
findOne(@Param() params: { id: string, name: string }): string {
return `This action returns a user with ID ${params.id} and name ${params.name}`;
}在这个例子中,@Param() 返回一个包含 id 和 name 参数的对象。
4. 路由参数的验证
Nest.js 支持对路由参数进行验证。可以使用 ValidationPipe 和 DTO(数据传输对象)来验证路由参数的类型和格式。
// www.javascriptcn.com code example
import { Controller, Get, Param, UsePipes, ValidationPipe } from '@nestjs/common';
import { IsNumberString } from 'class-validator';
class UserIdDto {
@IsNumberString()
id: string;
}
@Controller('users')
export class UsersController {
@Get(':id')
@UsePipes(new ValidationPipe({ transform: true }))
findOne(@Param() params: UserIdDto): string {
return `This action returns a user with ID ${params.id}`;
}
}在这个例子中,UserIdDto 类定义了 id 参数的类型和验证规则,ValidationPipe 用于验证路由参数。
5. 路由参数的转换
Nest.js 支持将路由参数自动转换为指定的类型。例如,可以将字符串类型的 id 参数转换为数字类型。
@Get(':id')
findOne(@Param('id', ParseIntPipe) id: number): string {
return `This action returns a user with ID ${id}`;
}在这个例子中,ParseIntPipe 将 id 参数从字符串转换为数字。