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

时间:2015-10-12 15:33:54

标签: 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.isPublished && !(_.isEmpty(this.thumbnailImage.image))) {
        next('Thumbnail Image is required when publishing a sample');
    }
    else {
        next();
    }
});

如果Sample模型isPublished设置为truethumbnailImage尚未设置,我想提出错误。当我console.log()这些值时,我会分别看到truefalse,但Keystone Admin中没有出现验证错误。

我已经在Github上查看了Keystone上的示例应用程序,而且Mongoose文档有很多示例,但我还没有看到任何处理多个文档路径的文档。

mongoose custom validation using 2 fields(目前有12个赞成票)的例子也不适用于我。

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

1 个答案:

答案 0 :(得分:5)

您不应该!否定验证条件的第二部分,因为当 为空时,您当前正在标记验证错误。

所以改成它:

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报告验证失败时,还需要将错误字符串包装在Error对象中。