hapi.js - hapijs joi 验证,验证大于其他属性的总和

标签 hapi.js joi

我想验证字段“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/

相关文章:

node.js - 将请求 header 添加到 Node 中的 Azure Application Insights 事件

javascript - 使用 async wait 抽象 Hapi17 路由

javascript - 使用 Joi 浏览器进行异或验证

javascript - Joi 数组验证忽略所需的嵌套键

javascript - 如何使用 Joi 验证其键应与外部对象的另一个键(其值为数组的键)匹配的嵌套对象?

cors - 如何使用 Glue 在 Hapi.js 中设置全局 CORS

javascript - Hapi.js、Bookshelf.js 和一个真实世界的例子

Azure AD v2 登录的 JavaScript OAuth2 流不提供 access_token

javascript - 如何修复 DynamoDB 上的 Joi 错误 TypeError : child. schema._getLabel is not a function

Node.js joi - .number() 无法通过 0