Проверка полей, которые зависят друг от друга в 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
не был установлен. Когда я console.log()
значения, я вижу true
а также false
соответственно, но в Keystone Admin не возникает ошибка проверки.
Я просмотрел примеры приложений на Github для Keystone, и в документации Mongoose есть много примеров, но я не видел ни одного, который обрабатывал бы несколько путей документов.
Пример по адресу: mongoose настраиваемая проверка с использованием 2 полей (в настоящее время с 12 ответами) также не работает для меня.
Что я делаю неправильно? Я использую Mongoose 3.8.35.
1 ответ
Ты не должен быть !
отрицая вторую часть вашего условия проверки, так как вы в настоящее время помечаете ошибку проверки, когда она не пуста.
Так что измените его на:
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
сообщить об ошибке проверки.