我正在创建一个爬虫来解析游戏我在主文件(crawler.js)上有这个功能
function kicked() {
try {
info.logged = false;
info.next_login = 0;
info.login_tries = 0;
report('Crawler disconnected from game, reconnecting.');
}
catch (error) {
report('Disconected() error => ' + error);
}
}
我有
module.exports = { kicked: kicked };
在另一个文件(更新会话)中我有
var crawler = require('../../crawler');
但是当我调用 crawler.kicked()
我得到未定义,如果我使用 console.log(crawler);
它显示一个空对象没有任何错误,只是一个空对象,我找不到为什么文件是’导出功能有什么帮助吗?
原文由 user2942910 发布,翻译遵循 CC BY-SA 4.0 许可协议
问题是你有循环依赖,当 A 需要 B 时会发生这种情况,B 需要 A,等等。这些并不总是问题。 Node 可以处理循环依赖。但是,如果对 Node 模块的解析方式没有很好的理解,您很可能会遇到问题(通常是空对象问题)。
让我们仔细看看这里发生了什么:
crawler.js
),它开始执行。crawler.js
需要session.js
。session.js
开始执行它的顶层代码。请记住crawler.js
还没有执行完它自己的顶级代码。session.js
需要crawler.js
。但是crawler.js
没有任何东西可以导出(还)。它还没有到达文件的底部(它仍然在顶部执行它的 require 调用)。所以现在我们可以看到发生了什么。空对象是默认的导出对象。当您执行
module.exports = {...}
时,您将模块的exports
属性重新分配给一个新对象。但是module.exports
由于上述原因尚未重新分配。解决方案将是重新考虑您的代码。我建议尝试完全消除循环依赖;一旦您更好地掌握了它们的工作原理,您可能希望不时使用它们。您的主文件应该没有任何导出。尝试将你的
kicked
函数放在另一个文件中,并在需要的地方要求它。