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

在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)

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

app.useGlobalPipes(
  new ValidationPipe({
    transform: true,
  }),
);
我有一个控制器,它接收一个数字参数:

@Get(':id')
getStuff(@Param('id') id: number) {
  ...
}
问题是,当我尝试使用非数字参数(
path/to/controller/one
而不是
path/to/controller/1
)时,我收到的是500个内部服务器错误,而不是预期的400个响应。我错过了什么


谢谢

ValidationPipe对基本类型(字符串、布尔值、数字)不起作用,因此您需要在
@Param()
装饰器上使用
ParseIntPipe
或类似的工具,以确保应用相同类型的逻辑。可能发生的情况是,您的服务中的某些内容需要一个数字,但它得到一个字符串,并且不知道如何从那里处理它

On选项是为URL参数创建DTO,如下所示

export class controllerOuteparamdto{
@转换(({value})=>Number.parseInt(值,10))
@IsNumber()
id:编号;
}

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

所以启用ValidationPipe的自动转换功能意味着自动转换的数据没有被验证?我再说一遍,因为没有类可以告诉
类转换器
类验证器
。您可以创建一个DTO类,或者按照文档的部分进行操作