具有类验证器的高级条件(可能)?
Posted
技术标签:
【中文标题】具有类验证器的高级条件(可能)?【英文标题】:Advanced conditions with class-validator (possible)? 【发布时间】:2020-05-30 02:53:56 【问题描述】:我有 TypeScript NestJS 项目。
我需要验证传入的 DTO 到我的 API。它可以被描述为“创建项目”,其中我们有建筑类型(房屋、公寓、花园),并根据我们需要定义的类型:
房子:包括房间在内的楼层 公寓:房间 花园:什么都没有(它是一个“房间”)房屋类型示例:
type: HOUSE,
floors: [
name: "1st floor",
rooms: [
name: "bedroom"
]
]
扁平型示例:
type: FLAT,
rooms: [
name: "bedroom"
]
我过去在 AJV
的帮助下完成了这项工作,但现在当我们迁移到 NestJS 时,我们开始使用 class-validator
。
我的问题是,如果我可以在class-validator
中创建那些高级条件(例如,当类型为 FLAT 时,则只期望 ROOMS,而不是 FLOORS)?
【问题讨论】:
【参考方案1】:使用class-validator
,您可以选择Conditional Validation 和Group Validation,或者您始终可以创建自定义管道并按照习惯使用AJV。对于条件验证,您可以基于 type
创建验证,然后让 class-validator 处理其余部分
【讨论】:
“你可以根据类型创建验证”,你能举个例子吗? @coler-j 如果我能弄清楚我的意思,那么绝对。我很确定我在某处看到过示例,但我现在不记得在哪里 这根本没有帮助。我也想做同样的事情。我只找到基本示例,这些示例都只是文档的副本,没有比所讨论的示例更高级的了。说有“某处的例子”并不能说明太多。【参考方案2】:您必须为此创建一个自定义验证器。文档非常好: https://github.com/typestack/class-validator#custom-validation-classes
当您创建自定义验证器类时,在 validate
的实现中,您可以访问在 args
参数中验证的其他参数。只需编写您的 if 语句,如果不满足则返回 false。您甚至可以返回自定义错误消息并实现自己的装饰器。
【讨论】:
以上是关于具有类验证器的高级条件(可能)?的主要内容,如果未能解决你的问题,请参考以下文章