在模块内调用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
。