仅当父级存在时才验证嵌套对象
Validate nested object only if parent is present
我有一个看起来像这样的请求正文:
{
"folder": { "value": "testFolder", "operator": "=" },
"name": { "value": "5456", "operator": "contains" }
}
虽然请求正文不是必需的。如果 body
存在,我如何验证每个对象是否存在 value
和 operator
?
编辑:
忘了说我想用 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()
})
)
我有一个看起来像这样的请求正文:
{
"folder": { "value": "testFolder", "operator": "=" },
"name": { "value": "5456", "operator": "contains" }
}
虽然请求正文不是必需的。如果 body
存在,我如何验证每个对象是否存在 value
和 operator
?
编辑:
忘了说我想用 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()
})
)