类验证器不验证实体
Posted
技术标签:
【中文标题】类验证器不验证实体【英文标题】:class-validator doesn't validate entity 【发布时间】:2021-07-24 04:03:12 【问题描述】:我可以使用class-validator
来验证Entity
列吗?
这不会验证列:
import IsEmail from 'class-validator';
@Entity()
export class Admin extends BaseEntity
@Column( unique: true )
@IsEmail()
email: string;
但是,当我在代码中除实体以外的任何其他位置使用 class-validator
时,它会正确验证并且不允许输入错误。
这行得通:
@InputType()
export class RegisterInput
@Field()
@IsEmail()
email: string;
【问题讨论】:
您是否使用Admin
类作为输入DTO 类型?
我会说最好不要暴露你的实体,而只依赖于 DTO => 实体映射
不,我使用 RegisterInput
作为 dto
这不应该在数据库级别上完成。带有验证管道的 DTO 将是解决此问题的最佳解决方案。您检查传入的请求,然后让它与与数据库交互的服务进行通信。
【参考方案1】:
实体应该是干净的
@Entity()
export class Admin extends BaseEntity
@Column( unique: true )
email: string;
当你定义一个 DTO 来检查传入的请求时。
export class AdminDto
@IsEmail()
email: string;
在您的控制器中,您将使用 AdminDto 检查传入的请求。
@Controlller('route')
export class AdminController
constructor(private yourService: yourserviceClass)
@Post('/api')
async createSomething(@Body('email', ValidationPipe) email: string) //Your request body //would be checked against your DTO
this.yourService.createMethod(email)
希望这能回答你的问题。
【讨论】:
我遇到了同样的问题。这就是我一直在寻找的。谢谢以上是关于类验证器不验证实体的主要内容,如果未能解决你的问题,请参考以下文章
.NET6之MiniAPI(二十):实体验证FluentValidation
从PowerDesigner表字段的Name到EF实体类属性的Display Name(根据PowerDesigner生成EF实体类中文注释和验证元数据)