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

推荐答案

在 Nest.js 中,@Query 装饰器用于从请求的查询参数中提取数据。它通常用于 HTTP GET 请求中,从 URL 的查询字符串中获取参数。

示例代码

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

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

在这个示例中,@Query('name')@Query('age') 分别从查询字符串中提取 nameage 参数,并将它们传递给 findAll 方法。

本题详细解读

1. @Query 装饰器的作用

@Query 装饰器用于从 HTTP 请求的查询字符串中提取参数。查询字符串是 URL 中 ? 后面的部分,通常用于传递非敏感数据。

2. 使用场景

  • GET 请求@Query 通常用于 GET 请求,因为 GET 请求的参数是通过 URL 传递的。
  • 分页和过滤:在实现分页、过滤等功能时,@Query 可以方便地提取分页参数(如 pagelimit)或过滤条件(如 nameage)。

3. 参数提取

  • 单个参数@Query('paramName') 用于提取单个查询参数。
  • 多个参数:可以通过多个 @Query 装饰器提取多个参数。
  • 对象形式:如果需要提取所有查询参数,可以使用 @Query() 而不带参数名,返回一个包含所有查询参数的对象。

4. 类型转换

  • 自动类型转换:Nest.js 会根据方法参数的类型自动进行类型转换。例如,如果参数类型是 number,Nest.js 会尝试将查询字符串中的值转换为数字。
  • 手动类型转换:如果自动转换不符合需求,可以在方法内部手动进行类型转换。

5. 示例扩展

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

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

在这个扩展示例中,findAll 方法提取了 pagelimitsort 三个查询参数,并为它们提供了默认值。

纠错
反馈