在多个文件之间共享和修改变量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 bot),我想添加一个功能,窥视可以做@add 1或@remove 1.我有一个main.js,然后根据所说的触发器需要不同的文件.所以add会触发add.js文件,然后需要(‘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;你得到该号码的副本,而不是一个引用.更改计数不会更改“来源”.

但是,您应该具有文件导出功能.要求文件只能在第一次运行,但之后缓存并且不重新运行. 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;
    }
}

相关文章

这篇文章主要介绍“基于nodejs的ssh2怎么实现自动化部署”的...
本文小编为大家详细介绍“nodejs怎么实现目录不存在自动创建...
这篇“如何把nodejs数据传到前端”文章的知识点大部分人都不...
本文小编为大家详细介绍“nodejs如何实现定时删除文件”,内...
这篇文章主要讲解了“nodejs安装模块卡住不动怎么解决”,文...
今天小编给大家分享一下如何检测nodejs有没有安装成功的相关...