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

· 约 3 分钟读完 · 第 33 / 144 章

推荐答案

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

示例代码

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

本题详细解读

1. @Query 装饰器的作用

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

2. 使用场景

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

3. 参数提取

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

4. 类型转换

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

5. 示例扩展

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