在nestjs中使用自动转换验证时获得500

  • 本文关键字:验证 转换 nestjs nestjs
  • 更新时间 :
  • 英文 :


我正在使用NestJS,并试图让参数的自动转换工作。我添加了代码:

app.useGlobalPipes(
new ValidationPipe({
transform: true,
}),
);

我有一个控制器,它接收一个数字参数:

@Get(':id')
getStuff(@Param('id') id: number) {
...
}

问题是,当我尝试使用非数字参数(path/to/controller/one而不是path/to/controller/1(时,我会收到500 Internal Server错误,而不是预期的400响应。我错过了什么?

谢谢!

ValidationPipe不适用于基元类型(字符串、布尔值、数字(,因此您需要在@Param()装饰器上使用ParseIntPipe或类似的东西,以确保您得到相同类型的逻辑。可能发生的情况是,您的服务中有一些东西正在等待一个数字,但它得到了一个字符串,并且不知道如何从那里处理它。

选项是为URL参数创建一个DTO,如

export class ControllerRouteParamDto {
@Transform(({ value }) => Number.parseInt(value, 10))
@IsNumber()
id: number;
}

@Transform()是必要的,因为url和查询参数是以字符串形式输入的,而不是它们的相关类型。

最新更新