Javascript 节点:将公开的函数分配给对象';s属性在另一个文件中
我有一个基于express的RESTAPI服务。一个API接收两个参数: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
- 身份证
- 类型
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不是变量吗?在我看来,是的。如果没有,是什么?