Javascript 如何在不在Plumier中创建新DTO(数据传输对象)的情况下进行验证

Javascript 如何在不在Plumier中创建新DTO(数据传输对象)的情况下进行验证,javascript,node.js,typescript,plumier,Javascript,Node.js,Typescript,Plumier,我创建了一个包含密码确认的注册表单,它不是域模型的一部分。我不想为了验证工作而做额外的DTO 我的域模型如下所示: @collection() 导出类用户{ 建造师( @val.unique() 公共用户名:string, @val.unique() @val.email() 公共电子邮件:string, 公共密码:string, 公共角色:UserRole, public firstName:string, public lastName:string, 公共性别:“男性”|“女性”|“未指定

我创建了一个包含密码确认的注册表单,它不是域模型的一部分。我不想为了验证工作而做额外的DTO

我的域模型如下所示:

@collection()
导出类用户{
建造师(
@val.unique()
公共用户名:string,
@val.unique()
@val.email()
公共电子邮件:string,
公共密码:string,
公共角色:UserRole,
public firstName:string,
public lastName:string,
公共性别:“男性”|“女性”|“未指定”,
公共档案图片:字符串|未定义,
公开出生日期:年月日,
) { }
}
我的控制器如下所示

导出类用户控制器{
@邮递路线(“”)
保存(数据:用户){
//保存数据
}
}
我知道,使用Plumier,您可以包装自己的自定义验证,但如何在不创建新DTO(数据传输对象)的情况下实现这一点?DTO表示包含
confirmPassword
属性的请求正文?

是的,这是可能的

//自定义验证程序
函数confirmTheSame(){
返回val.custom(异步(x,info)=>{
if(x!==info.ctx.request.body.password)
返回“密码不相同”
}) 
}
//控制器
导出类UsersController{
@邮递路线(“”)
保存(数据:User,@confirmTheSame()confirmPassword:string){
//保存数据
}
}
说明:

  • (高优先级),将分配
    confirmPassword
    ,因为它与请求正文属性匹配

  • (较低优先级),将与请求正文一起分配
    数据
    参数

  • Plumier不会抱怨缺少字段,这就是为什么即使您的
    User
    域模型不包含
    confirmPassword
    属性,#2也可以工作的原因