【发布时间】:2016-02-19 15:25:08
【问题描述】:
我在其中一条路线上获得了以下验证:
payload: {
keywordGroups: Joi.array().items(Joi.object().keys({
language: Joi.string().required(),
containsAny: Joi.array().items(Joi.string()).default([]).when('containsAll', { is: [], then: Joi.required() }),
containsAll: Joi.array().items(Joi.string()).default([]).when('containsAny', { is: [], then: Joi.required() }),
notContainsAll: Joi.array().items(Joi.string()).default([]),
notContainsAny: Joi.array().items(Joi.string()).default([])
})).required(),
}
我正在尝试使containsAny 或containsAll 必须包含至少一个字符串。如果containsAny 为空,则containsAll 应该至少有一项。如果containsAll 为空,containsAny 至少应包含一项。
但似乎Joi.when 在涉及对象数组时并不能真正起作用。
【问题讨论】:
-
尝试将你的 is: [] 换成 Joi.array().length(0)。文档表明 is 条件应该是 Joi 类型。 github.com/hapijs/joi/blob/master/API.md#anywhenref-options
-
我认为您也在此处创建了循环依赖项。看到这个线程:github.com/hapijs/joi/issues/588
-
@Cuthbert 我认为我的主要问题是如何正确引用这些字段,因为它们位于对象数组中。
标签: javascript validation hapijs joi