NestJS DTO class 设置 class-validator 和 class-transformer 执行顺序
NestJS DTO class set class-validator and class-transformer execution order
在 NestJS 中使用 class-validator
和 class-transformer
包描述 DTO class 时,有没有办法设置装饰器 的执行顺序 ?
当 foo
的值设置为 null
时,以下代码失败并出现错误:
Expected a string but received a null
@IsOptional()
@IsString()
@IsByteLength(1, 2048)
@Transform(({ value }) => validator.trim(value))
@Transform(({ value }) => validator.stripLow(value))
foo: string;
即使我有一个 isString
装饰器,它应该检查是否确实传递了一个字符串,并且必须已经失败才能不将执行传递给 @Transform
装饰器,但它并没有失败。
Class-验证器基于 classes 工作。进入服务器的请求负载只是普通的 JSON 对象。要更改此行为,Nest 必须先从 class-validator
调用 plainToClass
(如果您使用的是 ValidationPipe
)。因此,@Transform()
装饰器优先于其他 class-validator 装饰器,并且首先被执行。你可以通过使用多个管道来解决这个问题,或者可能为 @Transform()
装饰器提供默认值,但发生的是预期的效果。
在 NestJS 中使用 class-validator
和 class-transformer
包描述 DTO class 时,有没有办法设置装饰器 的执行顺序 ?
当 foo
的值设置为 null
时,以下代码失败并出现错误:
Expected a string but received a null
@IsOptional()
@IsString()
@IsByteLength(1, 2048)
@Transform(({ value }) => validator.trim(value))
@Transform(({ value }) => validator.stripLow(value))
foo: string;
即使我有一个 isString
装饰器,它应该检查是否确实传递了一个字符串,并且必须已经失败才能不将执行传递给 @Transform
装饰器,但它并没有失败。
Class-验证器基于 classes 工作。进入服务器的请求负载只是普通的 JSON 对象。要更改此行为,Nest 必须先从 class-validator
调用 plainToClass
(如果您使用的是 ValidationPipe
)。因此,@Transform()
装饰器优先于其他 class-validator 装饰器,并且首先被执行。你可以通过使用多个管道来解决这个问题,或者可能为 @Transform()
装饰器提供默认值,但发生的是预期的效果。