Objection.js игнорирует проверку неопознанного типа свойства? - PullRequest
0 голосов
/ 22 декабря 2018

Я использую эту 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).Однако операция вставки возвращает успех при вставке следующих данных:

{
    "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)

Ответы [ 2 ]

0 голосов
/ 25 декабря 2018

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

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

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

0 голосов
/ 22 декабря 2018

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

схема недопустима: data.properties ['date']. Тип должен быть равендля одного из допустимых значений 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.Если схема неверна, выдается ошибка.

...