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
相关产品推荐
相关产品推荐

