Ключевые слова Ajv и пользовательские сообщения об ошибках

Я написал схему, но, похоже, она не проходит проверку, как я ожидал. Я предполагаю, что что-то не так с синтаксисом моей схемы, но не могу понять это. Я ожидаю, что сообщения об ошибках для названия или цели не появятся до тех пор, пока сбор средств не будет завершен, поскольку они требуются только в том случае, если сбор средств завершен. Я пробовал много комбинаций, но ни одна из них не работает должным образом, эти две наиболее близки к тому, что мне нужно.

Попытка создания схемы 1: отображаются 4 сообщения об ошибках, 3 обязательные ошибки и 1 ошибка о том, что данные должны соответствовать схеме "тогда".

const schema = {
  required: ['fundraiser'],
  if: {
    properties: {
      fundraiser: { type: 'string' },
    },
  },
  then: {
    required: ['title', 'target'],
  },
  errorMessage: {
    required: {
      fundraiser: 'Please select an option',
      title: 'Please enter a title',
      target: 'Please enter a target',
    },
  },
};

Вторая попытка схемы: показывает 2 сообщения об ошибках, 1 обязательную ошибку и 1 ошибку, говорящую о том, что данные должны соответствовать схеме "тогда", которая является правильной, но затем, когда я завершаю сбор средств, допустимый становится истинным, и я ожидаю, что затем увижу обязательные ошибки для заголовка и цели. Также нет ошибок с моими определенными пользовательскими сообщениями об ошибках.

const scema = {
  if: {
    properties: { fundraiser: { minLength: 2 } },
    then: { required: ['title', 'target'] },
  },
  then: { required: ['fundraiser'] },
  errorMessage: {
    required: {
      fundraiser: 'Please select an option',
      title: 'Please enter a title',
      target: 'Please enter a target',
    },
  },
};

Я почти уверен, что делаю что-то не так со своей схемой, но из документации неясно, как использовать if/then в сочетании с пользовательскими сообщениями об ошибках с использованием ajv-errors. Любая помощь будет принята с благодарностью! Спасибо!


person Ruth    schedule 04.12.2017    source источник


Ответы (1)


Проблема с первой схемой заключается в том, что подсхема внутри «если» действительна, если только не присутствует свойство сбора средств, а не строка. Вероятно, это сработает так, как вы ожидаете, если вы добавите type: 'object' в корневую схему и переместите required внутрь подсхемы «if».

Проблема со второй подсхемой заключается в том, что первое «тогда», не имеющее «если» в том же объекте схемы, игнорируется (если только вы не используете ключевые слова ajv, реализующие if/then/else несколько иначе, чем то, как это определено в черновике). -07 спецификации схемы JSON) и подсхема внутри «if» действительна, даже если свойство по сбору средств отсутствует, а второе «тогда» может пройти, только если сбор средств присутствует.

person esp    schedule 05.12.2017