共享与修改多个文件的Node.js之间的变量
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机器人),我想添加一个功能,偷看可以做@add 1或1 @Remove我有一个main.js那则需要具体取决于该触发器不同的文件。因此,添加将触发add.js文件,然后将要求(“main.js”),并添加10(10为简化起见,它实际上会解析数,并使用该号码)给它。我遇到的问题是,当有人去了解和做@Remove。它要求(“main.js”)和从1导致-9减去10。和做@total将输出1。
我已经做了module.exports一个相当不错的搜索,我还没碰到过像我上面列出的例子。 The docs不包括接近我想要做什么任何的例子;而这些问题1,2我理解 - 但任何用处我不是 - 我的理解什么正在那里说。
题:
我想有两个@add和@Remove操纵相同的变量(计数),以及@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之间的变量
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机器人),我想添加一个功能,偷看可以做@add 1或1 @Remove我有一个main.js那则需要具体取决于该触发器不同的文件。因此,添加将触发add.js文件,然后将要求(“main.js”),并添加10(10为简化起见,它实际上会解析数,并使用该号码)给它。我遇到的问题是,当有人去了解和做@Remove。它要求(“main.js”)和从1导致-9减去10。和做@total将输出1。
我已经做了module.exports一个相当不错的搜索,我还没碰到过像我上面列出的例子。 The docs不包括接近我想要做什么任何的例子;而这些问题1,2我理解 - 但任何用处我不是 - 我的理解什么正在那里说。
题:
我想有两个@add和@Remove操纵相同的变量(计数),以及@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;
}
}