You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

NestJS同一请求中如何同时使用@Param路由参数与@Query查询参数

实现方案

1. 修改控制器路由与参数解析

调整路由路径把supplierID作为路径参数,用@Param装饰器提取该参数,剩余参数保留@Query提取后合并传入服务层即可:

@Get('/:supplierID/name/like')
findByLikeName(
  // 提取路由中的supplierID参数
  @Param('supplierID') supplierID: string,
  // 提取所有查询参数,类型支持扩展其他自定义字段
  @Query() query: { name: string; [key: string]: any }
) {
  // 合并参数后传入服务层,兼容原有服务层入参结构
  return this.supplierProductService.findByLikeName({
    supplierID,
    ...query
  });
}

2. 服务层适配(可选调整)

如果不需要额外处理其他查询参数,原有服务层逻辑可以完全不用修改;如果需要支持更多查询参数入库查询,仅调整类型声明和查询条件即可:

async findByLikeName({
  supplierID,
  name,
  ...otherParams
}: {
  supplierID: string;
  name: string;
  // 允许传入其他自定义查询参数
  [key: string]: any;
}): Promise<SupplierProduct[]> {
  return await this.supplierProductRepository.findAll({
    where: {
      name: {
        [Op.like]: `%${name}%`,
      },
      supplierID,
      // 若需要把其他查询参数也加入过滤条件,打开下方注释即可
      // ...otherParams
    },
  });
}

修改后请求路径会从原来的 GET /name/like?supplierID=xxx&name=yyy 变为 GET /xxx/name/like?name=yyy,其他自定义查询参数依旧可以直接拼接在路径后传递。

内容的提问来源于stack exchange,提问作者Bowis

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 00:54:06