Objection.js игнорирует проверку нераспознанного типа свойства?

Я использую эту jsonSchema в своей модели возражений:

  static get jsonSchema() {
    return {
      type: 'object',
      required: ['firstName', 'lastName'],

      properties: {
        id: { type: 'integer' },
        parentId: { type: ['integer', 'null'] },
        firstName: { type: 'string', minLength: 1, maxLength: 255 },
        lastName: { type: 'string', minLength: 1, maxLength: 255 },
        date: {type: 'unexisting-type'},
        age: { type: 'number' },
      }
    };
  }

Вы можете видеть, что тип date не распознается проверкой AJV (используется Objection.js). Однако операция Insert возвращает успех при вставке следующих данных:

{
    "firstName":"sample",
    "lastName":"sample",
    "date":"2018-12-21 10:20"
}

Почему AJV не возвращает ошибку проверки при создании схемы?

Я тестировал минимальный пример JSFiddle, и он возвращает ошибку (AJV v6.6.2) https://jsfiddle.net/ads80y5j/

Я использую Objection v1.4.0 (использует AJV v^6.1.1)


person Rashomon    schedule 21.12.2018    source источник


Ответы (2)


Я получаю следующее исключение при запуске кода ниже. (Если я оберну код в ваш JSFiddle, я тоже получу аналогичный результат.)

схема недействительна: data.properties['date'].type должен быть равен одному из допустимых значений, data.properties['date'].type должен быть массивом, data.properties['date'].type должен соответствовать какая-то схема в anyOf

var ajv = new Ajv({
  allErrors: true
});

var schema = {
  type: 'object',
  properties: {
    date: {
      type: 'unexisting-type'
    }
  }
};

try {
  var validate = ajv.compile(schema);
} catch (e) {
  console.log(e.message);
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/ajv/6.6.2/ajv.min.js"></script>

Может быть, где-то в вашем коде вы молча проглатываете исключение или вы каким-то образом отключили проверку самой схемы?

Из документации для compile:

Схема, переданная этому методу, будет проверена на соответствие метасхеме, если параметр validateSchema не имеет значения false. Если схема недействительна, будет выдана ошибка.

person customcommander    schedule 21.12.2018
comment
Спасибо за ваш ответ! Я думаю, что Objection проглатывает ошибку или использует вариант, который вы упомянули. Я добавил несуществующее свойство проверки, но по-прежнему не получаю никаких ошибок: date: {type: 'unexisting-type', unexistingProperty: 'unexisting-property'}. Я тестирую в этом примере: github. com/Vincit/objection.js/blob/master/examples/express-es6/ (добавлено только свойство «дата», больше ничего) - person Rashomon; 22.12.2018

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

На данный момент Objection v1 будет поддерживать это поведение, поскольку это критическое изменение. Может быть добавлено в v2.

https://github.com/Vincit/objection.js/issues/1182

person Rashomon    schedule 25.12.2018