NestJS DTO 类设置 class-validator 和 class-transformer 执行顺序
Posted
技术标签:
【中文标题】NestJS DTO 类设置 class-validator 和 class-transformer 执行顺序【英文标题】:NestJS DTO class set class-validator and class-transformer execution order 【发布时间】:2021-11-04 03:46:06 【问题描述】:在使用class-validator
和class-transformer
包描述NestJS 中的DTO 类时,有没有办法设置装饰器的执行顺序?
当foo
的值设置为null
时,以下代码将失败并出现错误:
需要一个字符串,但收到一个空值
@IsOptional()
@IsString()
@IsByteLength(1, 2048)
@Transform(( value ) => validator.trim(value))
@Transform(( value ) => validator.stripLow(value))
foo: string;
即使我有一个 isString
装饰器,它应该检查是否确实传递了一个字符串,并且必须已经无法不将执行传递给 @Transform
装饰器,但它没有失败。
【问题讨论】:
【参考方案1】:Class-Validator 基于类工作。进入服务器的请求负载只是简单的 JSON 对象。为了改变这种行为,如果你使用的是它的ValidationPipe
,Nest 必须首先从class-validator
调用plainToClass
。因此,@Transform()
装饰器优先于其他类验证器装饰器,并首先被执行。您可以通过使用多个管道来解决此问题,或者可以为 @Transform()
装饰器提供默认值,但所发生的是预期的效果。
【讨论】:
以上是关于NestJS DTO 类设置 class-validator 和 class-transformer 执行顺序的主要内容,如果未能解决你的问题,请参考以下文章
尝试安装类验证器和类转换器时,NestJS“警告 EBADENGINE 不支持的引擎 @angulardevkit”