Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/34.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何使用Joi仅验证嵌套对象上的字符串_Javascript_Node.js_Validation_Joi - Fatal编程技术网

Javascript 如何使用Joi仅验证嵌套对象上的字符串

Javascript 如何使用Joi仅验证嵌套对象上的字符串,javascript,node.js,validation,joi,Javascript,Node.js,Validation,Joi,我的目标是允许任意深度的嵌套对象包含任何内容。在这个嵌套对象中,我只想对字符串执行额外的验证 因此,对象可以如下所示: { "features": { "feature1": "value1", "feature2": false, "feature3": 321, "feature4": { "something": "else" }, "feature5": ["something", "more"] } 对于所有字符串值,我

我的目标是允许任意深度的嵌套对象包含任何内容。在这个嵌套对象中,我只想对字符串执行额外的验证

因此,对象可以如下所示:

{
  "features": {
    "feature1": "value1",
    "feature2": false,
    "feature3": 321,
    "feature4": {
      "something": "else"
    },
    "feature5": ["something", "more"]
}
对于所有字符串值,我希望执行一些额外的验证,但对于其他所有内容,我只希望将其视为有效

我只是其中的一部分,需要一些处理嵌套对象之类的帮助。以下是我得到的:

var providerSchema = Joi.object().keys({
  features: Joi.object().pattern(/^/, Joi.alternatives()
    .when(Joi.ref('features'), {
      is: Joi.string(),
      then: validateBlacklist(['<', '>']), 
      otherwise: Joi.any()
    }))
});

function validateBlacklist(list) {
  let regex = new RegExp(`^(?:(?!${list.join('|')}).)*$`);
  return Joi.string().regex(regex)
    .options({language: { string: { regex: { base: 'contains an invalid character'}}}});
}
var providerSchema=Joi.object().keys({
特性:Joi.object().pattern(/^/,Joi.alternations()
.when(Joi.ref(“特征”){
is:Joi.string(),
然后:ValidateBlaklist(['']),
否则:Joi.any()
}))
});
函数ValidateBlakList(列表){
让regex=newregexp(`^(?:(?!${list.join('|')})。*$`);
返回Joi.string().regex(regex)
.options({language:{string:{regex:{base:'包含无效字符'}}});
}
问题1:Alternations()。当()仅接受字符串时 目前,features对象中只接受字符串。似乎替代品()when()部分工作不正常。我试图检查引用是否是字符串;如果是,则通过validateBlaclist()执行额外的验证,否则,接受它

问题2:不支持嵌套对象 “我的验证”不支持对象中的对象。此嵌套需要支持任意深度,因为此features对象可以包含任何内容

有人知道怎么处理这个吗?任何帮助都将不胜感激

多谢各位