我需要使用动态对象来验证值。对象会定期更改,因此我将在运行时下载该对象并将其保存为本地格式良好的.json文件。我需要将这些值输入到对Joi.validate
的调用中(通过'context'选项),并验证数组中的项是否与上下文对象中的键/值对之一匹配。
// the defined schema
const schema = Joi.object().keys({
'foo': Joi.array()
.unique()
.items(
// these items need to match the keys/values from the context object
Joi.object().keys({
id: Joi.string()
.required(), // this needs to be a key from the context object
name: Joi.string()
.required(), // this needs to be the value from the context object for the key defined by the above id property
}),
)
})
// the .json file with the context object looks as such
{
"id of first thing": "name of first thing",
"id of second thing": "name of second thing",
...
}
// validation is done like this:
Joi.validate(theThingsToValidate, schema, {context: objectFromTheJsonFile});
答案 0 :(得分:0)
每次检测到文件已更改时,都可以动态构建模式。在这种情况下,除非我误解了您的问题,否则我认为您不需要上下文选项。
在我的示例代码中,\nSize(s): $size\n
数组中要验证的每个元素都采用格式
foo
,并且必须以这种格式匹配文件中的元素之一
{
id : 'id of thing',
name: 'name of thing'
}
转换文件中的数据以构建所有有效对象的列表并将其传递到{
"id of first thing": "name of first thing",
"id of second thing": "name of second thing",
...
}
应该可以正确实现预期的效果。
Joi.array().items
注意:mtimeMs已在节点8中添加,因此如果运行的是较低版本,则可能需要更改它。