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第一个钩子的功能复制到第二个文件中以使其工作,但这远非完美。

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

4

1 回答 1

1

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

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

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

于 2014-07-22T11:54:53.963 回答