Расширение моего комментария: «Функция валидатора ожидает 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