Проверка поля Mongoose не работает правильно - PullRequest
0 голосов
/ 02 мая 2018

Я использую библиотеку validator для проверки дат в моих схемах Mongoose.

У меня есть следующий код:

var validator = require('validator');

var TesteSchema = new Schema({
  testeData: { type: Date, required: true, validate: validator.isISO8601}

Поскольку Mongoose сохраняет даты в формате ISO8601, я проверяю его соответствующим образом. Но проблема в том, что валидация возвращает ложь, даже когда я предоставляю ей действительную дату ISO.

1 Ответ

0 голосов
/ 02 мая 2018

Расширение моего комментария: «Функция валидатора ожидает string, но Mongoose уже преобразовал значение в date к моменту выполнения валидатора.»

См. Следующий код ниже, чтобы увидеть это:

const mongoose = require('mongoose');

const TesteSchema = new mongoose.Schema({
  testeData: {
    type: Date,
    required: true,
    validate: (v) => v instanceof Date
  }
});
const Teste = mongoose.model('Teste', TesteSchema);

const teste = new Teste({
  testeData: '11/11/2018'
});

teste.validate(); // true

Обновление

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

const mongoose = require('mongoose');
const validator = require('validator');

const TesteSchema = new mongoose.Schema({
  testeData: {
    type: String,
    required: true,
    validate: validator.isISO8601,
    set: function (d) { return this._testeData = d; }
  },
  _testeData: {
    type: Date,
    required: true
  }
});
const Teste = mongoose.model('Teste', TesteSchema);

const testeBad = new Teste({
  testeData: '11/11/2018'
});
console.log(testeBad);
/*
{
  _id: ObjectId('5aeb55c58e374e7034c8a1bb'),
  _testeData: IsoDate('Sun Nov 11 2018 00:00:00 GMT-0500 (EST)'),
  testeData: '11/11/2018'
}
*/
testeBad.validate(); // Teste validation failed: testeData: Validator failed for path `testeData` with value `11/11/2018`

const testeGood = new Teste({
  testeData: '2018-11-11T00:00:00'
});
console.log(testeGood);
/*
{
  _id: ObjectId('5aeb55c58e374e7034c8a1bc'),
  _testeData: IsoDate('Sun Nov 11 2018 00:00:00 GMT-0500 (EST)'),
  testeData: '2018-11-11T00:00:00'
}
*/
testeGood.validate(); // true
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...