Nodejs:跨多个文件的全局变量

时间:2014-07-29 12:34:01

标签: javascript node.js singleton

我已经为我的节点服务器编写了几个文件的代码。

如果我有一个文件,请说一下basket.js:

var Basket = {
    fruits : 0,

    addFruit : function() {
        fruits++;
    },

    removeFruit : function() {
        fruits--;
    },

    printFruit : function() {
        console.log(this.fruits);
    }
}
modules.export = Basket;

我还有一个名为give.js的文件:

var Basket1 = require("./basket.js");

Basket1.addFruit();
Basket1.printFruit();

另一个名为take.js的文件:

var Basket2 = require("./basket.js");

Basket2.removeFruit();
Basket2.printFruit();

两个文件都会写入同一个篮子的实例吗? 换句话说,他们是否都能控制财产,水果? 节点是否自行管理竞争条件?即如果修改水果的两个命令同时从add和sub进入,节点是否知道如何处理它?<​​/ p>

如果我想让两个文件可以同时查看单个单元并访问它,那么这是一种方法吗?或者其他人如何做到这一点?

2 个答案:

答案 0 :(得分:4)

是的,他们将访问同一个对象。

  

模块在第一次加载后进行缓存。这意味着(除其他外)每次调用require('foo')将获得完全相同的返回对象,如果它将解析为同一个文件。

     

- Modules docs

不,节点本身不管理竞争条件,因为竞争条件不会由节点本身引起。节点是单线程的,因此没有代码可以与其他代码同时执行。有关更多解释,请参阅示例this answer

答案 1 :(得分:0)

我是初学者,但我认为正确的语法是module.exports而不是modules.export - 如果你可以纠正,那么人们就不会想知道为什么它不能像我刚才那样工作:)< / p>