【发布时间】:2016-02-16 15:08:42
【问题描述】:
假设我有以下架构:
var schema = {
fieldOne: Joi.string().required(),
fieldTwo: Joi.string().required()
};
是否可以设置一个验证规则来检查两个字段是否具有不同的值?
【问题讨论】:
标签: javascript node.js validation joi
假设我有以下架构:
var schema = {
fieldOne: Joi.string().required(),
fieldTwo: Joi.string().required()
};
是否可以设置一个验证规则来检查两个字段是否具有不同的值?
【问题讨论】:
标签: javascript node.js validation joi
是的。您可以通过使用Joi.ref 和Joi.invalid(别名为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);
它通过在 fieldTwo 的定义中引用 fieldOne 并禁止相同的值来工作。
【讨论】:
Joi.array().items(Joi.string().disallow(Joi.ref('fieldOne')).required()),虽然似乎不起作用,但可能是一个很好的起点。如果有的话,它可能指向您可以在 project page 上提出的错误。