gpt4 book ai didi

node.js - 在多个文件 node.js 之间共享和修改变量

转载 作者:IT老高 更新时间:2023-10-28 21:56:02 24 4
gpt4 key购买 nike

main.js

var count = 1;

// psuedocode
// if (words typed begins with @add)
require('./add.js');

// if (words typed begins with @remove)
require('./remove.js');

// if (words typed begins with @total)
require('./total.js');



module.exports.count = count;

total.js

var count = require('./main.js').count;
console.log(count);

add.js

var count = require('./main.js').count;
count += 10;
console.log(count);

remove.js

var count = require('./main.js').count;
count -= 10;
console.log(count);

console.log

 1
11
-9

背景:

我有一个应用程序(irc bot),我想添加一个功能,窥视可以执行@add 1 或@remove 1。我有一个 main.js,然后根据所说的触发器需要不同的文件。因此 add 将触发 add.js 文件,然后将 require('main.js') 并添加 10(10 为简化起见,它实际上会解析数字并使用该数字)。我遇到的问题是当有人四处走动并执行@remove 时。它需要('main.js')并从 1 中减去 10,得到 -9。并且执行@total 将输出 1。

我已经对 module.exports 进行了相当好的搜索,但我还没有遇到上面列出的示例。 The docs不要包括任何接近我想做的例子;还有这些问题1 , 2我理解——但对我没有任何用处——因为我理解那里所说的内容。

问题:

我想让@add 和@remove 都操作同一个变量(count),并让@total 返回考虑到@add 和@removes 的总数。我是否错误地使用了 module.exports;还是有一种共享变量的通用方式,一个文件能够修改 module.exports 的内容并将结果返回到 main.js 文件?

最佳答案

您的问题是,当您执行 var count = require('./main.js').count; 时,您会得到该数字的副本,而不是引用。更改 count 不会更改“来源”。

但是,您应该具有文件导出功能。要求一个文件只会在第一次运行它,但之后它会被缓存并且不会重新运行。 see docs

建议 #1:

// main.js
var count = 1;
var add = require('./add.js');
count = add(count);

// add.js
module.exports = function add(count) {
return count+10;
}

#2:

var count = 1;
var add = function() {
count += 10;
}
add();

#3:我个人会创建一个计数器模块(这是一个单一的实例,但你可以很容易地把它变成一个“类”):

// main.js
var counter = require('./counter.js');
counter.add();
console.log(counter.count);

// counter.js
var Counter = module.exports = {
count: 1,
add: function() {
Counter.count += 10;
},
remove: function() {
Counter.count += 10;
}
}

关于node.js - 在多个文件 node.js 之间共享和修改变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17120117/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com