javascript – 使用Joi,要求两个字段中的一个非空
作者:互联网
如果我有两个字段,我只想验证至少一个字段是非空字符串,但是当两个字段都是空字符串时失败.
这样的事情无法验证
var schema = Joi.object().keys({
a: Joi.string(),
b: Joi.string()
}).or('a', 'b');
验证时
{a: 'aa', b: ''}
或条件仅测试是否存在键a或b,但是测试a或b的条件是否为真.对于空字符串,Joi.string()将失败.
以下是一些要展示的测试用例的要点
http://requirebin.com/?gist=84c49d8b81025ce68cfb
解决方法:
下面的代码对我有用.我使用了替代品,因为.或者是真的测试密钥的存在,你真正想要的是另一种选择,你可以允许一个密钥或另一个密钥为空.
var console = require("consoleit");
var Joi = require('joi');
var schema = Joi.alternatives().try(
Joi.object().keys({
a: Joi.string().allow(''),
b: Joi.string()
}),
Joi.object().keys({
a: Joi.string(),
b: Joi.string().allow('')
})
);
var tests = [
// both empty - should fail
{a: '', b: ''},
// one not empty - should pass but is FAILING
{a: 'aa', b: ''},
// both not empty - should pass
{a: 'aa', b: 'bb'},
// one not empty, other key missing - should pass
{a: 'aa'}
];
for(var i = 0; i < tests.length; i++) {
console.log(i, Joi.validate(tests[i], schema)['error']);
}
标签:hapijs,javascript,joi 来源: https://codeday.me/bug/20191007/1869074.html