Проверить, что два свойства равны

Можно ли проверить, что два свойства объекта типа string равны, используя Joi?

Я нашел Joi.ref(), но мне интересно, есть ли другой способ сделать это. Тем более, что Joi.ref(), похоже, не поддерживает any.error()


person Alexander Zeitler    schedule 29.08.2019    source источник
comment
Я вас помню, вы создали пакет npm docker-compose, спасибо за это! Не могли бы вы подробно описать, что вы пытаетесь делать с any.error()? Должен ли пароль совпадать с другим и какие сообщения об ошибках вам нужны?   -  person a1300    schedule 28.09.2019
comment
Соответствие паролей - это как раз и есть предполагаемый вариант использования. Как это делается с помощью Joi, не имеет значения. Я просто хочу использовать Joi, когда это возможно.   -  person Alexander Zeitler    schedule 30.09.2019
comment
Я нашел решение, которое работает с Joi.ref()   -  person a1300    schedule 02.10.2019


Ответы (1)


Да, можно проверить, совпадают ли два свойства объекта. И использование Joi.ref() - предпочтительный способ сделать это.

Если вы хотите использовать настраиваемые сообщения об ошибках, Joi.any.messages() вариант работает лучше всего. Joi.any.messages() позволяет перезаписывать различные сообщения об ошибках, которые создает свойство.

Вы также можете использовать параметр Joi.any.error(), но это не так элегантно и вам нужно будет переключиться между разные коды ошибок (например, string.base, any.required, _7 _...)

Полное решение с использованием Joi.any.messages()

const Joi = require('@hapi/joi');

const schema = Joi.object().keys({
  first: Joi.string().required(),
  second: Joi.string().required().equal(Joi.ref('first'))
          .messages({
            'string.base': 'second is not a string', // typeof second !== 'string || second === null
            'any.required': 'second is required', // undefined
            'any.only': 'second must match first' // second !== first
          })
});

const value = {
  first: 'hello',
  second: 'hello',
};

const result = schema.validate(value);
console.log(JSON.stringify(result.error, null, 2));
person a1300    schedule 02.10.2019