2015-05-12 2 views
0

мне нужно проверить, если пользователь выбирает 2 (ТЭБ) в течение месяца, то он не должен входить DayOfMonth < = 28 толькоМонго проверка месяц схема

Как проверить

моя схема подобна ниже

date: { 
    months: { 
     type: String, 
     required: true, 
     validate: [validatorMonths, 'allowed session values are * and 0 to 11'] 
    }, 
    dayOfMonth: { 
     type: String, 
     required: true, 
     validate: [validatorDayOfMonth, 'allowed day of month values are * and 1 to 31'] 
    } } 

function validatorDayOfMonth(v) { 
    return ((v == '*') || (v >= 1 && v <= 31)); }; 

function validatorMonths(v) { 
    return ((v == '*') || (v >= 0 && v <= 11)); }; 
+0

Какие проверки/рамочный ОРМ вы используете – ThrowsException

+0

Я использую Mongoose ORM рамки работы –

ответ

0

Вы можете использовать Date, чтобы проверить, если дата возвращается равно указанной даты:

function validatorDayOfMonth(v) { 
    // Obviously replace the year with the correct value to account for leap years. 
    // Within a validation function `this` refers to the root document being validated. 
    return ((v === '*') || new Date(2015, this.date.months, v).getDate() === v); 
}; 

Это работает, потому что конструктор даты автоматически корректирует дополнительные дни/месяцы на соответствующую дату.

new Date(2015, 1, 29).getDate() // 1 

Или вы могли бы использовать Moment, чтобы сделать то же самое (хотя это может быть излишним).

0

Я думаю, вам нужно будет воспользоваться преимуществами промежуточного программного обеспечения mongooose для проверки. Это позволяет подключить событие, которое можно назвать presave и доступ целую схему http://mongoosejs.com/docs/api.html#document_Document-validate

вы могли бы сделать что-то вроде

doc.pre('save', function(next) { 
    if(this.months === "2") { 
     this.days <= 28 && this.days >= 1 ? next() : next("Error message"); 
    else { 
     this.days <= 31 && this.days >= 1 ? next() : next("Error message"); 
} 
+0

Что делать, если пользователь выбирает 31 июня? –

+0

Только следующее требование от должности, которая указывает, что месяц 2 должен быть между 1 и 28. Даже это требование не сформулировано очень хорошо. – ThrowsException

Смежные вопросы