推荐答案
在 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
三个查询参数,并为它们提供了默认值。