【发布时间】:2020-02-25 11:46:48
【问题描述】:
我正在尝试将我的一个 Electron 应用程序的命令行版本制作为 Node.js 脚本。首先,我从我的 Electron 应用程序中复制了代码,但它的行为并不相同。例如,我在这里创建了两个模块。在 Electron 应用程序中调用 webscraper.scrape() 时,代码按预期执行。但是,当我在普通的 Node.js 脚本中调用该函数时,它会抛出一个"database is not defined error"。使用其他变量进行测试,似乎我在 main.js 中定义的任何变量都无法在我的任何模块中访问,这与我的 Electron 应用程序中的情况相反。
这是预期的行为吗?如何使我的变量可以被我的模块访问?这样做是不是很糟糕,如果是这样,我该如何改进我的 Electron 和 Nods.js 脚本?
// main.js
var database = require('./src/database.js');
var webscraper = require('./src/webscraper.js');
database.init().then(()=> {
webscraper.scrape();
});
// webscraper.js
exports.scrape = function() {
// Find where we left off
database.connection.query('SELECT `last_searched` FROM `post_index` WHERE `id` = 0', function (err, results) {
if (err) throw err;
...
});
}
【问题讨论】:
-
在 node.js 中,您在 main.js 中的
database变量仅在您导入它的 main.js 的模块范围内可用。如果您希望它在 webscraper.js 中可用,那么您也需要将它导入那里。每个模块都必须导入它需要的东西。这允许模块显式命名它们的依赖项,使它们更易于共享或重用,并使它们更易于测试。这种做法鼓励“良好的模块设计”。在您的特定情况下,您可能希望/需要将database实例传递给您的scrape()函数,以便它可以使用您已经初始化的那个。
标签: javascript node.js electron