Dee*_*mar 9 mongodb node.js typescript joi zod
我已经使用 JOI 实现了此代码,其中用户必须发送 userId 和正文中的至少一个键。如何使用 ZOD 实现相同的功能?
params: Joi.object().keys({
userId: Joi.required().custom(objectId),
}),
body: Joi.object()
.keys({
name: Joi.string(),
email: Joi.string().email(),
password: Joi.string().custom(password),
})
.min(1),
};
Run Code Online (Sandbox Code Playgroud)
Sou*_*man 17
我认为没有直接的模拟,但你可以使用或zod实现这个约束refinesuperRefine
使用优化您的架构可能如下所示:
const schema = z.object({
params: z.object({
userId: z.string()
}),
body: z
.object({
name: z.string(),
email: z.string().email(),
password: z.string()
})
.partial()
.refine(
({ name, email, password }) =>
name !== undefined || email !== undefined || password !== undefined,
{ message: "One of the fields must be defined" }
)
});
Run Code Online (Sandbox Code Playgroud)
如果优化失败,您将收到一条ZodError带有指定消息的消息。
可以在任意部分对象上重用的更通用的优化函数如下所示:
const atLeastOneDefined = (obj: Record<string | number | symbol, unknown>) =>
Object.values(obj).some(v => v !== undefined);
Run Code Online (Sandbox Code Playgroud)
我注意到对象 ID 和密码有自定义解析。我认为这些都可以完成,refine但我不熟悉 Joi 自定义验证器的工作原理,所以我不想用细化来编写它们,并让它成为不正确的代码。
| 归档时间: |
|
| 查看次数: |
16971 次 |
| 最近记录: |