hapijs joi 验证,验证大于其他 属性 的总和
hapijs joi validation , validate greater than from sum of other property
我想验证一个字段'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);
我想验证一个字段'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);