2015-10-12 2 views
1

Я пытаюсь выполнить проверку при сохранении элемента. Вот моя урезанная модель:Проверка полей, которые зависят друг от друга в Keystone.js

Sample.add({ 
    isPublished: { type: Types.Boolean, default: false }, 
    thumbnailImage: { type: Types.CloudinaryImage, folder: 'samples/thumbnails' }, 
}); 

Sample.schema.pre('validate', function(next) { 
    if (this.isPublished && !(_.isEmpty(this.thumbnailImage.image))) { 
     next('Thumbnail Image is required when publishing a sample'); 
    } 
    else { 
     next(); 
    } 
}); 

Я хочу, чтобы вызвать ошибку, если Sample модели имеет isPublished набор для true но thumbnailImage не была установлена. Когда I console.log() значения, я вижу true и false соответственно, но в Keystone Admin не возникает ошибки проверки.

Я просмотрел примеры приложений на Github для Keystone, и в документах Mongoose есть много примеров, но я не видел никаких дескрипторов нескольких путей к документам.

Пример: mongoose custom validation using 2 fields (в настоящее время с 12 upvotes) тоже не работает для меня.

Что я делаю неправильно? Я использую Mongoose 3.8.35.

ответ

3

Вы не должны быть !, отрицая вторую часть вашего условия проверки, так как вы в настоящее время отмечаете ошибку проверки, когда она не пусто.

Так изменить его:

Sample.schema.pre('validate', function(next) { 
    if (this.isPublished && _.isEmpty(this.thumbnailImage.image)) { 
     next(Error('Thumbnail Image is required when publishing a sample')); 
    } 
    else { 
     next(); 
    } 
}); 

Обратите внимание, что вам также необходимо обернуть строку ошибки в Error объекта при вызове next, чтобы сообщить о сбое проверки.

+0

OFFS. Спасибо что подметил это. Сообщение, которое я получаю сейчас, это: 'TypeError: строка не является функцией'. Я предполагаю, что мне нужно передать функцию обратного вызова? – Brandon

+0

Yeppers. Я собирался опубликовать то же самое. Большое вам спасибо за помощь. Очевидно, мне нужно больше кофе. – Brandon