Проверка

Проверка данных — это метод проверки точности и качества данных. Информация в базах данных постоянно обновляется, удаляется, запрашивается или перемещается несколькими людьми или процессами, поэтому очень важно обеспечить постоянную достоверность данных. В этой статье мы собираемся объяснить, как добавить несколько простых правил проверки в SQL. Мы можем выполнить проверку, используя «joi» и «mongose».

пример проверки на модели:

name:{
    type:String, 
    require:true
}

Встроенные валидаторы

Логика проверки выполняется Mongoose перед сохранением документа в базе данных. Вы также можете запустить его вручную, вызвав метод validate().

Встроенные валидаторы:

  • Строки: минимальная длина, максимальная длина, совпадение, перечисление
  • Числа: мин., макс.
  • Даты: мин., макс.
  • Все типы: требуется
name:{
    type:String, 
    require:true,
    minlength:5,
    maxlength:100
   }

Пользовательские валидаторы

tags:{
     type: Array,
     validate:{
     validator: function (v) {
                 return v && v.length > 0;
               },
      message:'A course should have at least one tag'
}}

Ошибка проверки

ValidationErrors на самом деле является частью validator.FieldError, а FieldError на самом деле является интерфейсом со многими методами, используемыми для обработки и получения информации об ошибке.

На левом изображении отображаются сведения об ошибке, а на правом изображении просто отображается сообщение об ошибке.

Типы схем

При определении схемы вы можете установить тип свойства для объекта SchemaType. Этот объект используется для определения требований проверки для данного свойства. SchemaTypes обрабатывает определение пути по умолчанию, проверка, геттеры, сеттеры, значения выбора поля по умолчанию для запросов и другие общие характеристики для свойств документа Mongoose.

Параметры типа схемы

Вы можете объявить тип схемы, используя тип напрямую, или объект со свойством type.

const schema1 = new Schema({
  test: String // `test` is a path of type String
});
const schema2 = new Schema({
  // The `test` object contains the "SchemaType options"
  test: { type: String } // `test` is a path of type string
});

В дополнение к свойству типа вы можете указать дополнительные свойства для пути. Например, если вы хотите перевести строку в нижний регистр перед сохранением:

const schema2 = new Schema({
  test: {
    type: String,
    lowercase: true // Always convert `test` to lowercase
  }
});

Все типы схем

  • required: логическое значение или функция, если true, добавляет требуемый валидатор для этого свойства.
  • default: Любая или функция, устанавливает значение по умолчанию для пути. Если значение является функцией, возвращаемое значение функции используется по умолчанию.
  • select: логическое значение, определяет проекции по умолчанию для запросов.
  • validate: функция, добавляет функцию проверки для этого свойства
  • get: функция определяет пользовательский геттер для этого свойства с помощью Object.defineProperty().
  • set: функция, определяет пользовательский установщик для этого свойства с помощью Object.defineProperty().
  • alias: строка, мангуст ›= только 4.10.0. Определяет виртуальный с заданным именем, который получает/устанавливает этот путь.
  • immutable: логическое значение, определяет путь как неизменяемый. Mongoose не позволяет вам изменять неизменяемые пути, если в родительском документе нет isNew: true.
  • transform: функция, Mongoose вызывает эту функцию, когда вы вызываете функцию Document#toJSON(), в том числе когда вы JSON.stringify() документ.
const numberSchema = new Schema({
  integerOnly: {
    type: Number,
    get: v => Math.round(v),
    set: v => Math.round(v),
    alias: 'i'
  }
});

const Number = mongoose.model('Number', numberSchema);

const doc = new Number();
doc.integerOnly = 2.001;
doc.integerOnly; // 2
doc.i; // 2
doc.i = 3.001;
doc.integerOnly; // 3
doc.i; // 3

Другие полезные свойства SchemaType:

  • Строки: нижний регистр, верхний регистр, отделка
  • Все типы: get, set (для определения собственного геттера/сеттера)