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

