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

时间:2017-10-24 19:00:15

标签: javascript node.js validation joi

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

所以,对象看起来像这样:

{
  "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'}}}});
}

问题1:alternative()。when()仅接受字符串 目前,feature对象中只接受字符串。似乎alternative()。when()部分无法正常工作。我试图检查引用是否是一个字符串;如果是,则通过validateBlaclist()执行额外验证,否则,接受它。

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

有谁知道该怎么做?任何帮助将不胜感激。

谢谢。

0 个答案:

没有答案