更改mongoose中的挂钩优先级

更改mongoose中的挂钩优先级,mongoose,hook,middleware,keystonejs,Mongoose,Hook,Middleware,Keystonejs,在这样的模型上,我有两个钩子(在不同的文件中): 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', gen

在这样的模型上,我有两个钩子(在不同的文件中):

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
则为false

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

所以我想知道是否有一种方法可以在猫鼬中按优先顺序运行钩子?
谢谢。

不幸的是,mongoose没有提供一种方法来区分
预保存
钩子或任何其他类型的钩子的优先级。但是,在您的特定用例中,您可能需要考虑使用<代码> POST验证< /COD> Hoo.

model.post('validate', function (doc) {
    if (doc.isNew) {
       doc.set('password', generatePassword());
    }
});
post-validate
hooks在保存文档之前执行,以及在任何用户定义的
pre-save
hooks之前执行