我应该如何将选项传递给节点模块?

时间:2011-06-16 00:53:52

标签: node.js

如果我有一个节点模块(我写过)并且我想传递一个值,我可以这样做:

var someValue process.env.SomeKey || '';

var someModule = require('./someModule');

someModule.setOption({ 'SomeKey' : someValue });

但感觉我正在重新发明轮子。

有更好的方法可以做到这一点还是完全主观?

3 个答案:

答案 0 :(得分:32)

通常,您只需从模块中导出一个函数:

module.exports = function(opts){
    return {
        // module instance
    };
}

然后在要求页面中:

var mod = require('module')({ someOpt: 'val' });

但实际上,无论你想做什么,都要这样做。没有固定的标准。

答案 1 :(得分:2)

我通常构建具有类似组件的模块,有时只是一个类,或者甚至只是选择一些方法。

(function () {
  var myClass = function (opts) {
    this.opts = opts;
  };
  myClass.prototype.blah = function () {
    console.log('blah');
  };
  exports.myClass = myClass;
})();

然后在您正在使用该模块的文件中。

var mymodule = require('./mymodule');
var myInstance = new mymodule.myClass({opt1: 'blah'});
myInstance.blah();

当然,您不需要只传递选项对象:)

答案 2 :(得分:1)

是的,这完全是主观的。

按照你演示的方式做到这一点很好。您也可以通过将其分配给module.exports来导出函数或类。