javascript – 创建后挂钩

假设我有一个猫鼬模型m.

这个模型是使用Schema创建的,它添加了一个记录事物的方法:

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

theLogger必须随时都可以提供,所以我在postinit hook处提供了theLogger.

这有效:

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

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

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

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

解决方法:

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

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);
上一篇:mongodb 数据库 创建 schema 模块化(3)


下一篇:javascript – 错误:解析器错误,解析了4344字节的0(Node.js)