2014-07-15 33 views
1

我有2个挂钩(在不同的文件):在这样一个模型更改钩优先猫鼬

model.pre('save', function(next) { 
    if (this.isModified('password')) 
     this.set('password, hash(this.get('password')) 
    next() 
}) 

model.pre('save', function() { 
    if (this.isNew) 
     this.set('password', generatePassword()) 
    next() 
}) 

我的第一钩来自一个模块,它必须是第一,我不能修改它。它会检查密码字段是否已修改,如果是,则进行哈希处理。 我的第二个钩子是由我创建的,我在创建用户时设置了随机生成的密码。

我的问题是,我的第一个钩子不会哈希我的密码,因为它是在第二个之前传递的。我尝试在第二个钩子中调用this.save,但如果我这样做,则isModified是错误的。

我不得不将第一个钩子的hash函数复制到第二个文件中以使其工作,但它远非完美。

所以我想知道是否有办法在猫鼬中以优先级顺序运行钩子? 谢谢。

回答

1

不幸的是,猫鼬并没有提供一种方法来优先考虑钩子或任何其他类型的挂钩。但是,在您的特定用例中,您可能需要考虑使用post validate钩子。

model.post('validate', function (doc) { 
    if (doc.isNew) { 
     doc.set('password', generatePassword()); 
    } 
}); 

post validate钩执行文档保存之前,和之前的任何用户定义pre save钩。