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

NestJS如何不修改Controller装饰器实现add/1路径参数映射?

解决方案:无需修改控制器装饰器实现add/1接口调用

你的代码里存在参数获取方式的错误,调整参数装饰器就能实现需求,完全不用修改@Controller()装饰器:

问题根源

@Post('add/:id')里的:id是路径参数,但你用了@Query('id')来获取——这个装饰器是用来抓取?id=1这类查询参数的,所以根本拿不到路径里的1。

修改后的代码

@Controller()
export class MyController {

  @Post('add/:id')
  async add(@Body() data: MyData, @Param('id') id?: string) {
     // 如果需要数字类型,手动转换即可:const numericId = Number(id);
     console.log(id);
     //...
  }
}

进阶:直接获取数字类型的id

如果希望id直接是数字类型,可以用NestJS的ParseIntPipe做自动转换:

import { ParseIntPipe } from '@nestjs/common';

@Controller()
export class MyController {

  @Post('add/:id')
  async add(@Body() data: MyData, @Param('id', ParseIntPipe) id?: number) {
     console.log(id); // 此时id是数字类型
     //...
  }
}

这样调整后,直接用POST /add/1就能调用该接口,完全不需要修改控制器的装饰器前缀。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 11:42:35