在模块内调用Node.js模块function

我正在尝试编写一个节点模块来清理我的代码,并将其分离到不同的文件中。

考虑下面的代码:

module.exports = { Hello : function(request, reply) { return reply("Hello " + World()); }, World : function() { return "World"; } } 

如果我导入上面的模块,并使用Hello函数作为特定路由的处理程序,我得到一个HTTP 500内部服务器错误。

如果我将Hello函数更改为,我将问题缩小到对World()的调用

 Hello : function(request, reply) { return reply("Hello World"); } 

然后,它工作正常,所以它似乎是从调出导出对象内的另一个函数绊倒

有谁知道为什么会发生这种情况,以及如何解决?

你应该这样称呼它:

 module.exports = { Hello: function(request, reply) { return reply("Hello " + module.exports.World()); }, World: function() { return "World"; } } 

如果你的目标是更干净的代码,我build议你将代码改为:

 function World() { return "World"; } function Hello(request, reply) { return reply("Hello " + World()); } module.exports = { Hello, } 

这将使您的代码更具可读性,并且只会导出实际需要的内容。 这个问题还有其他的解决scheme,

那么让我们来演示一下

this并没有定义函数所在的对象。它定义了从何处调用函数。 所以,

 var obj = { Hello : function(request, reply) { return reply("Hello " + this.World()); }, World : function() { return "World"; } }; obj.Hello("test", console.log); 

你需要添加this到你的World()调用 –

 module.exports = { Hello : function(request, reply) { return reply("Hello " + this.World()); }, World : function() { return "World"; } } 

World是导出对象的属性,而不是可访问范围内的variables – 所以您需要指定函数属于this