首先,是的,我知道之前已经问过这个问题,但我仍然无法弄清楚如何让它发挥作用。我相信问题是,我在Mac终端上通过node.js单独运行文件,类似于应用程序。
这是合约。我有一个文件bitt1.js,它有var mid = 293.03;
。
在我的另一个文件otherFile.js中,我有一个if,else语句,具体取决于变量mid
(位于bitt1.js中):
if (mid <= 290) {
trade = true;
} else {
trade = false; }
问题是,在终端中,我先运行bitt1.js,然后运行otherFile.js。这使得我无法从bitt1.js接收mid变量,并且它是未定义的。
我该如何解决这个问题?我只发现在html或其他内容中使用的东西,其中变量总是“可用”。
我是JS的新手和整个事情,所以我说的一些东西可能是不正确的...我也可能只是愚蠢而答案很明显,但请帮帮我......我已经考虑过创建一个JSON文件并使用其他两个文件从中写入/读取数据,但我觉得有更好的方法......
谢谢!
答案 0 :(得分:1)
node.js允许导入和导出。
说bitt1.js有:
var mid = 299
console.log(mid)
// Here is where you export the desired value
//export default mid
module.exports.mid = mid
然后,在你的otherFile.js
中// you import the value from bitt1.js
var mid = require('./bitt1')
console.log(mid) //Outputs 299
就是这样。
编辑:更新的答案
答案 1 :(得分:1)
开发人员NodeJS的代码可以工作,如果你不想修改变量的值 - 如果你只是想分享变量的初始值,它就能很好地工作。
但是如果你打算在mid
的运行时执行期间改变bitt1.js
的值并希望使用那个值,也许你可以使用Unix管道来插入它值为bitt1.js
的标准输入。
E.g。
// bitt1.js
var mid = 299;
console.log("<mid>%d</mid>", mid); // this is piped to stdin
// otherFile.js
var stdin = process.openStdin();
var data = "";
stdin.on('data', function(chunk) {
data += chunk;
});
stdin.on('end', function() {
data.match(/<mid>([\s\S]+)<\/mid>/i);
var mid = +data.match[1];
console.log(mid);
});
然后运行:node bitt1.js | node otherFile.js
将从otherFile.js 中打印299
。
这是一个粗略的解决方案:它应该需要对匹配表达式进行一些未定义的检查,当然管道不允许您在bitt1.js
文件中直接打印到控制台 - 您必须重新打印otherFile.js
中的所有内容,这会导致重复的代码。
但它可能是一个适合您的解决方案,一切都取决于您的要求!希望这会有所帮助。