wou*_*_be 9 javascript validation hapijs joi
我在其中一条路线上进行了以下验证:
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(),
}
Run Code Online (Sandbox Code Playgroud)
我试图让它containsAny
或containsAll
必须至少包含一个字符串.如果containsAny
为空,containsAll
则应至少有一个项目.如果containsAll
是空的,containsAny
至少应该包括一个项目.
但是Joi.when
当涉及一系列对象时,它似乎并不真正起作用.
您需要使用Joi.alternatives()
否则您将创建循环依赖项,如本期中所述.
在你的is
条件中when()
,你需要指定一个Joi类型而不是一个空数组.这个例子有效:
import * as Joi from 'joi';
var arraySchema = Joi.array().items(Joi.object().keys({
first: Joi.array().items(Joi.number()).default([])
.when('second', {is: Joi.array().length(0), then: Joi.array().items(Joi.number()).required().min(1)}),
second: Joi.array().items(Joi.number()).default([])
}));
var altArraySchema = Joi.array().items(Joi.object().keys({
first: Joi.array().items(Joi.number()).default([]),
second: Joi.array().items(Joi.number()).default([])
.when('first', {is: Joi.array().length(0), then: Joi.array().items(Joi.number()).required().min(1)}),
}));
var obj = [
{
first: [],
second: []
}
];
var finalSchema = Joi.alternatives(arraySchema, altArraySchema);
var result = Joi.validate(obj, finalSchema);
console.log(JSON.stringify(result, null, 2));
Run Code Online (Sandbox Code Playgroud)
变量obj
将失败,因为这两个验证first
和second
是空的.使其中任何一个非空都将通过验证检查.
归档时间: |
|
查看次数: |
5949 次 |
最近记录: |