验证多个Mongoose架构属性?

时间:2011-09-10 02:55:17

标签: validation node.js mongoose

我正在尝试做一些经典的事情,确保用户的用户名与他们的密码不同,在Nodejs / Mongoose中。

我认为使用单独的验证功能会很好,但我无法理解如何做到这一点。

到目前为止,我已经使用了model code from Alex Young's Notepad tutorial。他创建了一个我重复使用的虚拟password属性。

我的基本验证如下:

function validatePresenceOf(value) {
    return value && value.length;
}

User = new Schema({
    'username': {
        type: String,
        validate: [
            validatePresenceOf, 'a username is required',
        ],
        index: { unique: true }
    },
});

如何让验证者访问其他属性?

2 个答案:

答案 0 :(得分:8)

您可以通过this.propertyToBeCalled调用架构的其他属性。

schema.path('name').validate(function(v) {
    if (v === this.password) {
        return false;
    } else {
        return true;
    }
}, 'my error type');

或类似的东西。

答案 1 :(得分:0)

使用猫鼬5,我无法获得为我工作的公认答案。

相反,按照pre-validate middleware中的this answer方法,使用invalidate,可以达到目的:

schema.pre('validate', function (next) {
  if (this.username === this.password) {
    this.invalidate('password', 'Password cannot equal username', this.password);
  }
  next();
});