node.js - 使用 2 个字段的 Mongoose 自定义验证

标签 node.js mongodb express mongoose

我想使用 mongoose 自定义验证来验证 endDate 是否大于 startDate。如何访问 startDate 值?使用this.startDate时,不起作用;我不确定。

var a = new Schema({
  startDate: Date,
  endDate: Date
});

var A = mongoose.model('A', a);

A.schema.path('endDate').validate(function (value) {
  return diff(this.startDate, value) >= 0;
}, 'End Date must be greater than Start Date');

diff 是一个比较两个日期的函数。

最佳答案

您可以使用 Mongoose 'validate' middleware 来做到这一点这样您就可以访问所有字段:

ASchema.pre('validate', function(next) {
    if (this.startDate > this.endDate) {
        next(new Error('End Date must be greater than Start Date'));
    } else {
        next();
    }
});

请注意,在调用 next 以报告验证失败时,您必须将验证错误消息包装在 JavaScript Error 对象中。

关于node.js - 使用 2 个字段的 Mongoose 自定义验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23760253/

相关文章:

node.js - 使用 Github 包作为 npm Node 模块时的 Firebase 云功能部署问题

node.js - MQTT 客户端是否需要具有与 MQTT 代理用于 TLS 相同的 key 和证书?

javascript - 即使参数不同,npm 脚本也会运行默认脚本

java - 如何在 mongo 中加入 DBRef 对象

mongodb - Docker Compose MongoDB docker-entrypoint-initdb.d 不起作用

node.js - package.json 用于全局依赖项

java - mongodb DAO 在 save() 之前将所有属性设置为 null

node.js - 服务器端的 req.body 未定义

javascript - app.get 和 router.get 之间的区别(Express)

node.js - ExpressJS重定向方法