当对象模式无效时,如何强制joi调用自定义函数



我在Joi架构中创建了一个自定义函数,用于验证名称是否为equalconfirmName

我使用abortEarly: false来获取所有的错误。

问题是当object中的验证失败时,custom函数不会调用。

当前的结果输出仅针对CCD_ 6。应该是CCD_ 7和CCD_。

有没有办法像我所描述的那样让它发挥作用?

{ name: "foo", confirmName: "oo", birthYear: 0 },

codesandbox.io

const Joi = require("joi");
console.clear();
const schema = Joi.object({
name: Joi.string(),
confirmName: Joi.string(),
birthYear: Joi.number().integer().min(1900).max(2013)
}).custom((doc, helpers) => {
const { name, confirmName } = doc;
if (name !== confirmName) {
throw new Error("name not match!!");
}
});
const { error } = schema.validate(
{ name: "foo", confirmName: "oo", birthYear: 0 },
{ allowUnknown: true, abortEarly: false }
);
console.log({ error });
if (error) {
const { details } = error;
console.log({ details });
}

您不需要自定义验证来确保name等于confirmName

只需引用值:

const schema = Joi.object({
name: Joi.string(),
confirmName: Joi.ref('name'),
birthYear: Joi.number().integer().min(1900).max(2013)
});

如果你想覆盖错误消息,你可以使用。消息:

confirmName: Joi.string().required()
.valid(Joi.ref('name'))
.messages({'any.only': 'name not match!!'})

最新更新