创建后挂钩

时间:2017-09-16 15:34:54

标签: javascript mongoose

我们说我有一个猫鼬模型m

此模型m是使用架构s创建的,它添加了一种记录事物的方法:

s.methods.log = function(s) {
  this.theLogger(s);
}

theLogger必须随时提供,所以我在postinit hook处提供了logger。

这有效:

const x = await m.findOne({_id: ...});
x.log("something");

这里的问题是,这不会起作用:

const x = new m();
x.log("something"); // <--- theLogger is not defined. 

有没有办法勾选使用x运算符创建new的时刻?

1 个答案:

答案 0 :(得分:2)

我仍然不知道这些钩子是否存在,所以我最终通过使用函数扩展模型来解决这个问题:

return ((parent) => {
    function HookedModel(a, b) {
        // Pre new hooks here <-----
        this.constructor = parent;
        parent.call(this, a, b);
        // Post new  hooks here <-----
    }
    // Copy all static functions:
    for (const k in parent) {
        if (parent.hasOwnProperty(k)) {
            HookedModel[k] = parent[k];
        }
    }
    HookedModel.__proto__ = parent.__proto__;
    HookedModel.prototype = Object.create(parent.prototype);
    HookedModel.prototype.constructor = HookedModel;
    return HookedModel;
})(model);