NestJS控制器传递Request/Response参数报错:期望2实参却传入6个
问题解决:NestJS控制器调用服务方法的参数传递错误
错误原因
你在控制器的verifyToken方法中,错误地将装饰器@Req()和参数声明req:Request直接作为实参传入服务的getVerifyToken方法,这属于语法误用——@Req()这类装饰器仅能用于控制器方法的参数位置,用于注入请求对象,不能直接写在函数调用的参数列表里,这导致TypeScript解析出了不符合预期的参数数量,从而抛出错误。
修正方案
将@Req()和@Res()装饰器移到控制器verifyToken方法的参数位置,获取注入的请求、响应对象后,再传递给服务方法:
修正后的控制器代码
@Controller() export class AppController { constructor(private readonly appService: AppService) {} @Get('/whatsapp') verifyToken(@Req() req: Request, @Res() res: Response) { this.appService.getVerifyToken(req, res); } }
额外提示
- 你的环境变量拼写有误:
ACCES_TOKEN_FB应该改为ACCESS_TOKEN_FB,否则会导致验证逻辑中accessToken值为undefined,验证永远失败。 - 由于服务方法中已经通过
res.send()直接处理了响应,控制器方法无需返回值;如果需要保留NestJS的响应处理流程,可以给@Res()添加{ passthrough: true }选项,但当前场景下不需要。
内容的提问来源于stack exchange,提问作者Ariel
相关产品推荐
相关产品推荐

