Nest.js 中如何使用 @Param 装饰器?

推荐答案

在 Nest.js 中,@Param 装饰器用于从路由参数中提取值,并将其传递给控制器方法。以下是一个简单的示例:

-- -------------------- ---- -------
------ - ----------- ---- ----- - ---- -----------------

--------------------
------ ----- --------------- -
  -----------
  -------------------- --- -------- ------ -
    ------ ----- --- -------
  -
-

在这个示例中,@Param('id') 从路由参数中提取 id 的值,并将其传递给 findOne 方法。

本题详细解读

1. @Param 装饰器的基本用法

@Param 装饰器用于从路由参数中提取值。它通常用于处理动态路由,例如 /users/:id。在控制器方法中,你可以使用 @Param 来获取这些动态参数的值。

在这个例子中,@Param('id') 提取了路由中的 id 参数,并将其传递给 findOne 方法。

2. 提取多个参数

如果你需要从路由中提取多个参数,可以使用 @Param() 而不带参数名。这将返回一个包含所有路由参数的对象。

在这个例子中,@Param() 返回一个包含 idname 的对象,你可以通过 params.idparams.name 来访问这些值。

3. 参数类型转换

默认情况下,@Param 提取的参数是字符串类型。如果你需要将参数转换为其他类型(如数字),可以在方法内部进行转换。

在这个例子中,id 被转换为数字类型。

4. 使用 DTO 进行参数验证

在某些情况下,你可能希望对路由参数进行验证。你可以使用 DTO(Data Transfer Object)来实现这一点。

-- -------------------- ---- -------
------ - ----------- ---- ------ -------------- - ---- -----------------
------ - -------------- - ---- ------------------

----- --------- -
  -----------------
  --- -------
-

--------------------
------ ----- --------------- -
  -----------
  ------------------------------ ------- ----------- ------ -
    ------ ----- --- --------------
  -
-

在这个例子中,UserIdDto 类定义了一个 id 属性,并使用 @IsNumberString() 装饰器来确保 id 是一个数字字符串。ValidationPipe 用于验证参数是否符合 DTO 的定义。

5. 总结

@Param 装饰器是 Nest.js 中处理路由参数的重要工具。它可以帮助你轻松地从路由中提取参数,并将其传递给控制器方法。通过结合 DTO 和验证管道,你还可以对参数进行验证和类型转换,从而提高代码的健壮性和可维护性。

纠错
反馈