使用Node.js在不同的JavaScript文件中调用函数

使用Node.js在不同的JavaScript文件中调用函数,javascript,json,node.js,Javascript,Json,Node.js,我有一个Node.js库文件,它是我的Node.js应用程序文件导出函数所必需的 在应用程序文件中,我调用了导出的函数,向它传递了一些参数,它工作正常 在其中一个参数中,我想发送应用程序文件中声明的函数名;这样就可以对参数进行JSONified。但是,库文件中的代码无法按名称找到函数,因为它存在于另一个文件(应用程序文件)中 我知道我可以通过传递一个指向函数的指针而不是它的名称来克服这个问题,但是由于序列化(函数无法序列化),我希望传递名称 我不能从应用程序文件中导出函数并将其导入库文件中,因为

我有一个Node.js库文件,它是我的Node.js应用程序文件导出函数所必需的

在应用程序文件中,我调用了导出的函数,向它传递了一些参数,它工作正常

在其中一个参数中,我想发送应用程序文件中声明的函数名;这样就可以对参数进行JSONified。但是,库文件中的代码无法按名称找到函数,因为它存在于另一个文件(应用程序文件)中

我知道我可以通过传递一个指向函数的指针而不是它的名称来克服这个问题,但是由于序列化(函数无法序列化),我希望传递名称

我不能从应用程序文件中导出函数并将其导入库文件中,因为这将是一个循环引用,当然,库文件不需要了解应用程序文件


处理这种情况的推荐模式是什么?

推荐的模式可能仍然是传递函数对象-为什么传递引用时函数会被序列化

一个非常简单的替代方法是只在全局范围内定义函数,但这会污染全局范围,并与我们编写nodejs代码的非常棒的封装方式背道而驰:

global.yourCallback = function() { ... }

现在字符串
yourCallback
将起作用。

您可以在某种配置阶段或加载/定义函数时提前向库注册函数:

var mylib = require('./mylib')

function myfunc(){
     // ...
}
mylib.register('myfunc', myfunc);
假设注册是在启动时完成的,那么库和库的使用者可以将其称为“myfunc”

其他库/框架(如AngularJS)也做类似的事情,例如:

angularModule.controller('MyController', function(){/*...*/});

将其作为引用传递并使用.name属性。看,它没有被序列化。。。但是我希望有一个可序列化的配置,如{“onendrequest”:“myfunction”}通过在全局变量中声明函数,我解决了这个问题!谢谢@李嘉图不担心,但我很困惑——另一个答案没有解决您的问题,但您已将其标记为正确?