如何使用javascript函数返回节点模块中的对象

时间:2012-12-03 13:51:24

标签: javascript node.js module

我遇到一个问题,我正在使用一个文件来保存模块列表,并在我的nodejs服务器中的一次调用中要求此列表。我想以特定的方式使用列表中的模块。

modules.js -

Mods = {
  mymodule: require('./mymodule.js')
}

exports.f = function() {
  return Mods;
}

index.js -

f = require('./modules.js').f;

f().mymodule.echo("Hello World");

所以我现在想要将我正在调用的模块名称直接放入函数中,而不是如何使用f(),所以我可以这样做:

f = require('./modules.js').f;

f('mymodule').echo("Hello World");

我尝试了很多不同的实验,但无法让它工作,是否可以在javascript中执行此操作?

3 个答案:

答案 0 :(得分:1)

好吧,如果你这样做:

var Mods = {
    mymodule: require('./mymodule.js');
}

module.exports = function( name ) {
    return Mods[name];
};

然后你可以这样做:

var f = require( "./modules.js"); //no .f required

f( "mymodule" ).echo( "Hello world");

答案 1 :(得分:1)

编辑:我被要求解释我的答案,我很高兴这样做。解决方案的关键是所谓的括号表示法。该术语指的是使用变量访问JavaScript中对象的属性的能力。在下面的代码中,您可以看到如何使用Mods访问对象[name]的属性,其中name是一个包含属性名称作为字符串的变量。

Mods = {
  mymodule: require('./mymodule.js');
}

exports.f = function(name) {
  return Mods[name];
}

答案 2 :(得分:1)

我会说更多...... ^^

var Mods = {
    mymodule: require('./mymodule.js');
}

module.exports = function( name ) {
  if( !name ) return Mods;
  return Mods[name];
};