我有一个名为_storage
的全局对象变量集。它看起来像这样:
_storage = {
test : {
}
};
当用户发送请求以将其信息添加到" test"例如,在存储中的对象,它应该设置_storage.test[1] = true;
。
设置完之后,我这样做是为了看看变量是什么样的:
console.log(_storage.test);
并输出正确答案:
{ '1' : true }
所有看起来都很完美,直到用户发送请求以获取test
对象中的所有当前项目。这就是问题所在。变量似乎自己清空并返回空对象{}
。
用户在测试中设置数据后发送请求以查看test
内部的内容,因此用户请求甚至在查看数据之前就不会出现此问题设置它。这是在两个独立的模块中完成的,一个设置数据,另一个设置数据(两个模块不仅仅是为了这个,显然),但_storage变量是全局的,不应该受两个影响单独的模块。
以下是其失败的一个示例:
_storage.test
内发送设置1 = true的请求,生成_storage.test[1] = true;
_storage.test
现在为{ test : { '1' : true } }
_storage.test
_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;
};
答案 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年以来,我一直在与节点合作,而我从未认为需要使用全局变量。我怀疑你的应用需要它。所以尽管这对你有用,但我建议你想出另一种方法。