推荐答案
在 Nest.js 中,路由参数可以通过在路由路径中使用冒号 (:
) 来定义,并在控制器方法中使用 @Param()
装饰器来获取。
-- -------------------- ---- ------- ------ - ----------- ---- ----- - ---- ----------------- -------------------- ------ ----- --------------- - ----------- -------------------- --- -------- ------ - ------ ----- ------ ------- - ---- ---- -- ------- - -
在这个例子中,: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(数据传输对象)来验证路由参数的类型和格式。
-- -------------------- ---- ------- ------ - ----------- ---- ------ --------- -------------- - ---- ----------------- ------ - -------------- - ---- ------------------ ----- --------- - ----------------- --- ------- - -------------------- ------ ----- --------------- - ----------- ------------- ---------------- ---------- ---- --- ---------------- ------- ----------- ------ - ------ ----- ------ ------- - ---- ---- -- -------------- - -
在这个例子中,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
参数从字符串转换为数字。