在 express 中间件中访问模块实例

Accessing module instance in express middleware

我想要一个节点模块,它导出一个 returns 个 class 函数实例的工厂。

//myModule.js
function MyClass(options) {
    this.options = options || {};
}

MyClass.prototype.handle = function(req, res, next) {
    //I want to access the instance here in the middleware function
    console.log(this.options);
}

module.exports = function(options) {
    return new MyClass(options);
}

然后,在 server.js 中,我附加了这个中间件:

var myInstance = require("./myModule")({
    foo: "bar"
});

app.use(myInstance.handle);

在中间件函数中,this 引用了其他东西(也许是全局对象?),但我想访问包含选项的实例。我能想出的唯一解决方案是调用 myInstance.handle.bind(myInstance),但这对模块的用户来说不太友好。有没有其他方法可以解决这个问题,或者有没有更好的方法来完全完成这种模式?

最好尽可能避免使用原型,并且您可以使用类似这样的东西来实现您正在做的事情:

module.exports = function(opts) {

    // private methods/vars
    var options = opts || {};

    return {
      handle: function(req, res, next) {
        console.log(opts);
      }
    }
}