javascript - 如何在 Plumier 中不创建新的 DTO(数据传输对象)进行验证
问题描述
我创建了一个注册表单,其中包含不属于域模型的密码确认。我不想为了验证工作而制作额外的 DTO。
我的域模型如下:
@collection()
export class User {
constructor(
@val.unique()
public username: string,
@val.unique()
@val.email()
public email: string,
public password: string,
public role: UserRole,
public firstName: string,
public lastName: string,
public gender: "Male" | "Female" | "Unspecified",
public profilePicture:string | undefined,
public dateOfBirth: Date,
) { }
}
我的控制器就像下面一样
export class UsersController {
@route.post("")
save(data: User) {
//save the data
}
}
我知道使用 Plumier 您可以创建自己的自定义验证,但是如何在不创建新的 DTO(数据传输对象)表示包含confirmPassword
属性的请求正文的情况下做到这一点?
解决方案
是的,这是可能的,
//custom validator
function confirmTheSame(){
return val.custom(async (x, info) => {
if(x !== info.ctx.request.body.password)
return "Password not the same"
})
}
//controller
export class UsersController {
@route.post("")
save(data: User, @confirmTheSame() confirmPassword:string) {
//save the data
}
}
解释:
推荐阅读
- sql - 如何在 EXECUTE 命令中使用表变量?
- python - 如何使用 Python 脚本从 C++ 文件生成可执行文件?
- python - 将文件从 URL 上传到 Microsoft Azure Blob 存储
- java - Java 列表比较导致错误我无法确定
- python - 如何绘制动画图?
- laravel - 使用 Facebook Laravel 问题社交名流登录
- c# - 为什么我不能将 Double.Min 和 Max 的相同文字值分配为双精度值?
- google-chrome - Google Chrome 扩展通知 API 权限级别
- python - 如何在 matplotlib 中显示“摆动”堆叠图的宽度值
- c - 打印 10 的幂 - C 中的 Printf