我想验证字段“familymemberCount”,它应该大于等于其他字段。 我尝试了下面的代码,但这不允许将“+”运算符与 Ref 一起使用。 我们如何用其他值的总和进行验证?
export const familyMemberRulesSchema = Joi.object({
relationMembers: Joi.object({
motherCount: Joi.number().integer().min(0).max(5).optional(),
fatherCount: Joi.number().integer().min(0).max(5).optional(),
childrenCount: Joi.number().integer().min(0).max(5).optional()
}),
familyMemberCount: Joi.number().integer().min(0).max(15).greater(
Joi.ref('relationMembers.motherCount') +
Joi.ref('relationMembers.fatherCount') +
Joi.ref('relationMembers.childrenCount')
)
});
最佳答案
joi.ref
不能以这种方式工作。您需要编写一个自定义函数来获取所有值并以这种方式求和。基本上在使用 Joi.ref
时使用 adjust
函数。像这样的东西。
const Joi = require("@hapi/joi");
const familyMemberRulesSchema = Joi.object({
relationMembers: Joi.object({
motherCount: Joi.number().integer().min(0).max(5).optional(),
fatherCount: Joi.number().integer().min(0).max(5).optional(),
childrenCount: Joi.number().integer().min(0).max(5).optional()
}),
familyMemberCount: Joi.number().integer().min(0).max(15).greater(
Joi.ref('relationMembers', {"adjust": relationMembers => {
return relationMembers.motherCount + relationMembers.fatherCount + relationMembers.childrenCount;
}})
)
});
const result = familyMemberRulesSchema.validate({"relationMembers": {"motherCount": 2, "fatherCount": 1, "childrenCount": 2}, "familyMemberCount": 6});
console.log(result);
const error = familyMemberRulesSchema.validate({"relationMembers": {"motherCount": 4, "fatherCount": 1, "childrenCount": 2}, "familyMemberCount": 6});
console.log(error);
关于hapi.js - hapijs joi 验证,验证大于其他属性的总和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60316685/