在快速中间件中访问模块实例

时间:2015-02-17 16:42:32

标签: node.js express middleware

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

//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);

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

1 个答案:

答案 0 :(得分:0)

最好尽可能避免使用原型,并且您可以使用以下内容实现您正在做的事情:

module.exports = function(opts) {

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

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