Предположим, у меня есть следующая схема:
var schema = {
fieldOne: Joi.string().required(),
fieldTwo: Joi.string().required()
};
Можно ли установить правило проверки, которое проверяет, имеют ли оба поля разные значения?
Предположим, у меня есть следующая схема:
var schema = {
fieldOne: Joi.string().required(),
fieldTwo: Joi.string().required()
};
Можно ли установить правило проверки, которое проверяет, имеют ли оба поля разные значения?
Да, это так. Для этого вы используете Joi.ref
и _ 2_ (псевдоним 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
и запрещая одно и то же значение.
Joi.array().items(Joi.string().disallow(Joi.ref('fieldOne')).required())
, хотя, похоже, не работает, но может быть хорошей отправной точкой. Во всяком случае, это может указывать на ошибку, которую вы могли поднять на странице проекта.
- person Ford; 20.11.2015