Проверка полей, которые зависят друг от друга в 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 сообщить об ошибке проверки.

Другие вопросы по тегам