2

在使用和包描述 NestJS 中的 DTO 类时,有没有办法设置装饰器的执行顺序class-validatorclass-transformer

foo当值设置为null错误时,以下代码将失败:

需要一个字符串,但收到一个空值

@IsOptional()
@IsString()
@IsByteLength(1, 2048)
@Transform(({ value }) => validator.trim(value))
@Transform(({ value }) => validator.stripLow(value))
foo: string;

即使我有一个isString装饰器,它应该检查是否确实传递了一个字符串,并且必须已经无法不将执行传递给@Transform装饰器,但它并没有失败。

4

1 回答 1

1

Class-Validator 基于类工作。进入服务器的请求负载只是简单的 JSON 对象。要更改此行为,Nest 必须首先调用plainToClassfromclass-validator如果您正在使用它的ValidationPipe. 因此,@Transform()装饰器优先于其他类验证器装饰器,并首先被执行。你可以通过使用多个管道来解决这个问题,或者可以为@Transform()装饰器提供默认值,但发生的事情是预期的效果。

于 2021-09-07T15:43:34.233 回答