繁体   English   中英

Joi 验证架构 - 两个字段不能具有相同的值

[英]Joi validation schema - two fields must not have the same value

假设我有以下架构:

var schema = {
  fieldOne: Joi.string().required(),
  fieldTwo: Joi.string().required()
};

是否可以设置验证规则来检查两个字段是否具有不同的值?

是的。 你可以通过使用Joi.refJoi.invalid (别名为Joi.disallow )来实现这Joi.disallow 对于您的特定示例,它将是:

var assert = require('assert');
var Joi = require('joi');

var schema = Joi.object().keys({
  fieldOne: Joi.string().required(),
  fieldTwo: Joi.string().disallow(Joi.ref('fieldOne')).required()
});

测试它会让我们得到我们期望的结果:

assert.ok(Joi.validate(4, schema).error !== null);
assert.ok(Joi.validate({ fieldOne: 'a', fieldTwo: 'a' }, schema).error !== null);
assert.ok(Joi.validate({ fieldOne: 'a', fieldTwo: 'b' }, schema).error === null);

它的工作原理是在fieldOne的定义中fieldTwo并禁止相同的值。

不幸的是,我不确定是否存在对不同值的直接验证,但您可以尝试使用array#unique()代替:

var schema = {
  fieldOne: Joi.string().required(),
  fieldTwo: Joi.string().required(),
  fieldOneAndTwo: Joi.array().unique()
};

并在验证之前设置fieldOneAndTwo = [fieldOne, fieldTwo]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM