Node.JS全局变量未保持更新

时间:2016-02-06 23:02:26

标签: javascript node.js

我有一个名为_storage的全局对象变量集。它看起来像这样:

_storage = { 
   test : {

   } 
};

当用户发送请求以将其信息添加到" test"例如,在存储中的对象,它应该设置_storage.test[1] = true;

设置完之后,我这样做是为了看看变量是什么样的: console.log(_storage.test);并输出正确答案:

{ '1'  : true }

所有看起来都很完美,直到用户发送请求以获取test对象中的所有当前项目。这就是问题所在。变量似乎自己清空并返回空对象{}

用户在测试中设置数据后发送请求以查看test内部的内容,因此用户请求甚至在查看数据之前就不会出现此问题设置它。这是在两个独立的模块中完成的,一个设置数据,另一个设置数据(两个模块不仅仅是为了这个,显然),但_storage变量是全局的,不应该受两个影响单独的模块。

以下是其失败的一个示例:

  1. 用户在_storage.test内发送设置1 = true的请求,生成_storage.test[1] = true;
  2. 根据console.log ,
  3. _storage.test现在为{ test : { '1' : true } }
  4. 用户发送查看来自_storage.test
  5. 的所有数据的请求 根据console.log,
  6. _storage.test{},就好像它没有设置
  7. 这是我用来获取,设置和删除数据的代码:

    exports.GetUserData = function () {
    
        return global._storage.test;
    
    };
    
    exports.RemoveUserData = function (uid) {
    
        delete global._storage.test[Number(uid)];
    
    };
    
    exports.AddUserData = function (uid) {
    
        global._storage.test[Number(uid)] = true;
    
    };
    

1 个答案:

答案 0 :(得分:0)

好的,所以我认为你没有显示你的所有代码,但这是我所做的工作:

// index.js
'use strict';

global._storage = global._storage || {};
global._storage.test = global._storage.test || {};

exports.GetUserData = function () {
    return global._storage.test;
};

exports.RemoveUserData = function (uid) {
    delete global._storage.test[Number(uid)];
};

exports.AddUserData = function (uid) {
    global._storage.test[Number(uid)] = true;
};


// other.js
'use strict';

global._storage = global._storage || {};
global._storage.test = global._storage.test || {};

exports.GetUserData = function(){
  return global._storage.test;
}

然后我从我的副本中运行了这个:

> var it = require('./');
undefined
> var other = require('./other');
undefined
> it.AddUserData('1234');
undefined
> it.GetUserData();
{ '1234': true }
> other.GetUserData();
{ '1234': true }
>

这样可以按设计工作。事情就是这样......自2009年以来,我一直在与节点合作,而我从未认为需要使用全局变量。我怀疑你的应用需要它。所以尽管这对你有用,但我建议你想出另一种方法。