Javascript 节点:将公开的函数分配给对象';s属性在另一个文件中

Javascript 节点:将公开的函数分配给对象';s属性在另一个文件中,javascript,node.js,function,properties,Javascript,Node.js,Function,Properties,我有一个基于express的RESTAPI服务。一个API接收两个参数: 身份证 类型 API应该将id解析为一些细节,并为所有类型执行一系列常见任务。解析id的函数因变量类型而异 我试图通过创建1+n参考文件来实现这一点,其中1是包含解析id流和所有常见任务的文件,n是指包含基于类型的id特定解析函数的文件。代码示例如下所示 type1.js module.exports.resolveId = function(id, callback) {...callback}; module.e

我有一个基于express的RESTAPI服务。一个API接收两个参数:

  • 身份证
  • 类型
API应该将
id
解析为一些细节,并为所有类型执行一系列常见任务。解析id的函数因变量
类型
而异

我试图通过创建
1+n
参考文件来实现这一点,其中
1
是包含解析id流和所有常见任务的文件,
n
是指包含基于类型的id特定解析函数的文件。代码示例如下所示

  • type1.js

    module.exports.resolveId = function(id, callback) {...callback};
    module.exports.otherFunctions....
    
        function resolveId (id, callback) {...callback};
        module.exports.resolveId = resolveId; 
    
  • common.js

    var type1Lib = require('./type1.js'); 
    var resFunc = {type1:typeLib.resolveId};
    function performTasks(id, type, callback) {
        async.auto(
            resolve:function(cb) {
                resFunc[type](id, cb);
            },
            otherFunc:['resolve', function(cb) {cb}]
        }, callback)
    }
    
在执行到行
resFunc[type](id,cb)
时,代码崩溃,因为
resFunc[type]
未定义

我试图在type1.js中首先声明函数

    function resolveId (id, callback) {...callback};
    module.exports.resolveId = resolveId; 
但这也没用


我是否遗漏了一些非常基本的东西

如果变量
类型
类似于1、2、3。。。然后您的require调用应该在
performTasks
正文中:

function performTasks(id, type, callback) {
  var resFunc = require('./type' + type); // and, no extension needed here
  async.auto(
    resolve:function(cb) {
      resFunc(id, cb);
    },
    otherFunc:['resolve', function(cb) {cb}]
  }, callback)
}
你的模块是:

function resolveId (id, callback) {...callback};
module.exports = resolveId; 
或者,您可以
提前要求
所有模块:

var resFuncs = {
  1: require('./type1'),
  2: require('./type2'),
  3: require('./type3')
};

function performTasks(id, type, callback) {
  async.auto(
    resolve:function(cb) {
      resFuncs[type](id, cb);
    },
    otherFunc:['resolve', function(cb) {cb}]
  }, callback)
}
编辑


“module.exports”只是模块文件中定义的变量,它正是require()调用返回的变量。您可以为其分配一个函数,也可以为其分配一个由多个变量、对象或函数组成的对象。

b谢谢您的回复。My type是一个字符串,每个type.js包含多个函数。因此,我不能真正执行module.exports=resolveId;另外,module.exports和module.exports.resolveId之间有什么区别?我也在试图从理论上理解这一点。你可以有多个函数,它只会影响你在
require('./typeX')的最后一点之后的内容。
。如果执行module.exports=function,则只能执行单个函数导出,并且require调用应以结尾);module.exports和module.exports.resovleId都将函数分配给自然界中的属性,对吗?如果它们在本质上是相同的,为什么一个工作而另一个不工作?“module.exports”只是一个变量。你可以随意使用它。对答案添加了一个小的解释。我建议读一读:我理解这一点。module.exports.resolveId不是变量吗?在我看来,是的。如果没有,是什么?