NestJS接口中无法正确打印路由参数studentId该如何解决?
问题原因
你遇到的问题分两种常见场景,对应原因如下:
- 场景1:
console.log(studentId)无输出/输出undefined- 路由路径不匹配:如果控制器类上有
@Controller()指定的统一前缀,需要把前缀加入访问路径,比如前缀为students时要访问/students/123才能命中该接口,路径错误时接口不会触发,自然不会打印参数 @Param装饰器导入错误:需要确认装饰器是从@nestjs/common包导入,导入错包会导致参数解析失效- 路由匹配冲突:如果同控制器下静态路由(如
@Get('/list'))定义在动态参数路由之后,访问静态路径时会优先命中动态参数路由,此时拿到的参数值不符合预期,需调整路由定义顺序
- 路由路径不匹配:如果控制器类上有
- 场景2:
console.log打印正常,但返回的字符串没有替换${studentId}为实际值
你使用普通双引号包裹了模板插值语法,JS/TS中只有反引号()包裹的字符串才支持${变量}插值,双引号内的${}`会被当成普通文本输出。
修复方案
修复后的完整代码如下:
import { Controller, Get, Param } from '@nestjs/common'; // 根据你的业务调整统一前缀,没有可删除 @Controller('students') export class StudentController { @Get('/:studentId') getStudentById( @Param('studentId') studentId: string ){ console.log(studentId); // 双引号替换为反引号实现模板插值 return `Get Student By Id: ${studentId}.`; } }
操作检查项:
- 确认
@Param从@nestjs/common导入 - 调整路由定义顺序,把所有静态路由放到动态参数路由前
- 访问路径和路由规则保持一致
- 返回值的字符串包裹符号从双引号改为反引号
内容的提问来源于stack exchange,提问作者Rajib Hossain Pavel
相关产品推荐
相关产品推荐

