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

Validate nested object only if parent is present

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

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

虽然请求正文不是必需的。如果 body 存在,我如何验证每个对象是否存在 valueoperator

编辑: 忘了说我想用 Joi Validator。我 运行 遇到的问题是这样的:

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

我应该在那里使用什么?

检查主体是否存在(对象,是否为空),如果存在则开始循环检查其对象(使用函数,比 ifs 更清晰),如果不匹配,则 return 假,否则为真。

例如:

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 */
}

在文档和论坛中进一步挖掘后,这个解决方案对我有用。可能对某人有帮助:

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