我在这样的模型上有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的优先顺序运行钩子? 感谢。
答案 0 :(得分:1)
不幸的是,mongoose没有提供一种方法来确定pre save
钩子或任何其他类型的钩子的优先级。但是,在您的特定用例中,您可能需要考虑使用post validate
挂钩。
model.post('validate', function (doc) {
if (doc.isNew) {
doc.set('password', generatePassword());
}
});
post validate
挂钩在保存文档之前以及任何用户定义的pre save
挂钩之前执行。