【问题标题】:Change the hooks priority in mongoose更改猫鼬中的钩子优先级
【发布时间】:2014-09-05 08:13:55
【问题描述】:

我在这样的模型上有 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 中按优先顺序运行钩子? 谢谢。

【问题讨论】:

    标签: mongoose hook middleware keystonejs


    【解决方案1】:

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

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

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

    【讨论】:

      猜你喜欢
      • 2012-02-24
      • 1970-01-01
      • 2012-03-03
      • 2011-06-10
      • 1970-01-01
      • 1970-01-01
      • 2021-03-06
      • 2015-05-23
      • 2018-03-04
      相关资源
      最近更新 更多