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

标签 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。

最佳答案

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

所以改成:

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 报告验证失败时的对象。

关于node.js - 在 Keystone.js 中验证相互依赖的字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33084927/

相关文章:

javascript - 添加 Integer 创建条目后的 ERR_EMPTY_RESPONSE node.js

node.js - 有没有更好的方法来使用 Node.js 运行 CLI 命令?

javascript - 如何使 mongoose 在执行查找查询时失败

javascript - Keystonejs:生成的 URL 类型字段未通过单击作为链接打开

linux - 安装 keystone.js

mongodb - 无法使用 MongoDB 配置 Keystone 6

mysql - Node.js 从 MySQL 查询返回结果

javascript - Heroku 没有运行 gulp 吗?

node.js - 如何使用嵌套数组文档进行 Mongoose 聚合

node.js - Mongoose 嵌套对象数组中的唯一值