Node.js 验证Keystone.js中相互依赖的字段

Node.js 验证Keystone.js中相互依赖的字段,node.js,mongoose,keystonejs,Node.js,Mongoose,Keystonejs,保存项目时,我正在尝试进行验证。这是我的简化模型: Sample.add({ isPublished: { type: Types.Boolean, default: false }, thumbnailImage: { type: Types.CloudinaryImage, folder: 'samples/thumbnails' }, }); Sample.schema.pre('validate', function(next) { if (this.isPub

保存项目时,我正在尝试进行验证。这是我的简化模型:

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
但未设置
缩略图图像,则我想引发错误。当我
console.log()
这些值时,我会分别看到
true
false
,但Keystone Admin中不会出现验证错误

我浏览了Github for Keystone上的示例应用程序,Mongoose文档中有很多示例,但我没有看到任何处理多个文档路径的示例

例如:(目前有12张赞成票)对我也不起作用


我做错了什么?我使用的是猫鼬3.8.35。

你不应该是
否定验证条件的第二部分,因为当前正在标记验证错误,而验证错误不是空的

因此,将其更改为:

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();
    }
});

请注意,在调用
next
报告验证失败时,还需要将错误字符串包装到对象中。

OFFS。谢谢你指出这一点。我现在得到的消息是:
TypeError:string不是函数。我假设我需要传递一个回调函数?Yeppers。我正要发布同样的东西。非常感谢你的帮助。显然,我需要更多的咖啡。