仅当存在父对象时才验证嵌套对象

时间:2019-10-16 16:16:46

标签: javascript node.js joi

我有一个看起来像这样的请求正文:

{
    "folder": { "value": "testFolder", "operator": "=" },
    "name": { "value": "5456", "operator": "contains" }
}

虽然不是必需的内容。如果存在value,如何验证每个对象都存在operatorbody

修改: 忘记提及我要使用Joi Validator。我遇到的问题是这样的:

body: Joi.object().keys({
    $key: Joi.object().keys({ <-- since the $key placeholder is unique
        value: Joi.string().required(),
        operator: Joi.string().required()
    })
})

在那里我应该怎么用?

2 个答案:

答案 0 :(得分:0)

检查body是否存在(对象,是否为空),如果存在,则开始循环检查其对象(使用函数,比ifs更干净),如果不匹配,则返回false,否则返回true

例如:

const ifHaveItemValidateBody = function(body) {
    if (!body) return false;

    for (let k in body) {
        const item = body[k];
        if ((!(item && item.value && item.operator))) {
            return false;
        }
    }
    return true;
};

在您的服务器条目中:

if (body && !ifHaveItemValidateBody(body) {
    /* do something */
}

答案 1 :(得分:0)

在文档和论坛中进行了进一步的研究后,该解决方案对我有效。对某人可能会有帮助:

body: Joi.object().pattern(
  Joi.string(),
  Joi.object().keys({
    value: Joi.string().required(),
    operator: Joi.string().required()
  })
)