需要相同的模块,不同的路径,不共享的变量
Same module required, different path, variables not shared
我真的不知道 require
是如何工作的,我试图找出真相。
Nodejs 文档说,每次你需要相同的模块(不同路径或不同路径)时,你都会得到相同的对象。但对我来说,这不是同一个对象,即使我需要相同的模块。
我创建了一个简单的项目来尝试这个,一个内存缓存系统。首先我们有主文件,第一个测试文件用于添加项目,第二个测试文件用于获取添加的项目。
//main.js
var exports = module.exports = {};
var debug = require("debug")("memcache:main");
var CACHE = {};
debug(CACHE);
exports.set = addItem;
exports.get = getItem;
function addItem(key, value) {
debug(key);
debug(value);
CACHE[ key ] = value;
debug(CACHE[ key ]);
}
}
function getItem(key) {
debug(key);
debug(CACHE[ key ]);
return CACHE[ key ];
}
第一个测试文件添加一个项目
//test/test1.js
var memcache = require("../main");
memcache.set("id1", { name: "lola" });
第二个测试文件检索添加的项目
// test/child/test2.js
var memcache = require("../../main");
setInterval(
function () {
console.log(memcache.get("id1"));
},
3000
);
现在这是控制台输出
MacBook-Pro:memcache fluxb0x$ DEBUG=memcache:* node test/test1.js
memcache:main {} +0ms
memcache:main id1 +3ms
memcache:main { name: 'lola' } +0ms
memcache:main undefined +1ms
memcache:main { name: 'lola' } +0ms
MacBook-Pro:memcache fluxb0x$ DEBUG=memcache:* node test/child/test2.js
memcache:main {} +0ms
memcache:main id1 +3s
memcache:main undefined +0ms
undefined
memcache:main id1 +3s
memcache:main undefined +0ms
undefined
memcache:main id1 +3s
memcache:main undefined +1ms
undefined
memcache:main id1 +3s
memcache:main undefined +0ms
undefined
memcache:main id1 +3s
memcache:main undefined +0ms
undefined
memcache:main id1 +3s
memcache:main undefined +0ms
undefined
有什么建议吗?我怎样才能用不同的路径要求相同的模块,并且仍然有相同的变量?
谢谢。
您的缓存不是真正的内存缓存,它只是一个保存值的对象。所以它在节点的两次执行中不是持久的。这可以通过对您的代码做一些小改动来证明。
更改测试 2 文件以公开测试方法
// test/child/test2.js
var memcache = require("../../main");
exports.test = function(){
setInterval(
function () {
console.log(memcache.get("id1"));
},
3000
);
}
将值添加到缓存后,在 test1 中使用暴露的测试方法。
//test/test1.js
var memcache = require("../main");
var test2 = require("./child/test2");
memcache.set("id1", { name: "lola" });
test2.test();
然后 运行 test1 像你一样。
$ DEBUG=memcache:* node test/test1.js
这会给你预期的结果。
我真的不知道 require
是如何工作的,我试图找出真相。
Nodejs 文档说,每次你需要相同的模块(不同路径或不同路径)时,你都会得到相同的对象。但对我来说,这不是同一个对象,即使我需要相同的模块。
我创建了一个简单的项目来尝试这个,一个内存缓存系统。首先我们有主文件,第一个测试文件用于添加项目,第二个测试文件用于获取添加的项目。
//main.js
var exports = module.exports = {};
var debug = require("debug")("memcache:main");
var CACHE = {};
debug(CACHE);
exports.set = addItem;
exports.get = getItem;
function addItem(key, value) {
debug(key);
debug(value);
CACHE[ key ] = value;
debug(CACHE[ key ]);
}
}
function getItem(key) {
debug(key);
debug(CACHE[ key ]);
return CACHE[ key ];
}
第一个测试文件添加一个项目
//test/test1.js
var memcache = require("../main");
memcache.set("id1", { name: "lola" });
第二个测试文件检索添加的项目
// test/child/test2.js
var memcache = require("../../main");
setInterval(
function () {
console.log(memcache.get("id1"));
},
3000
);
现在这是控制台输出
MacBook-Pro:memcache fluxb0x$ DEBUG=memcache:* node test/test1.js
memcache:main {} +0ms
memcache:main id1 +3ms
memcache:main { name: 'lola' } +0ms
memcache:main undefined +1ms
memcache:main { name: 'lola' } +0ms
MacBook-Pro:memcache fluxb0x$ DEBUG=memcache:* node test/child/test2.js
memcache:main {} +0ms
memcache:main id1 +3s
memcache:main undefined +0ms
undefined
memcache:main id1 +3s
memcache:main undefined +0ms
undefined
memcache:main id1 +3s
memcache:main undefined +1ms
undefined
memcache:main id1 +3s
memcache:main undefined +0ms
undefined
memcache:main id1 +3s
memcache:main undefined +0ms
undefined
memcache:main id1 +3s
memcache:main undefined +0ms
undefined
有什么建议吗?我怎样才能用不同的路径要求相同的模块,并且仍然有相同的变量?
谢谢。
您的缓存不是真正的内存缓存,它只是一个保存值的对象。所以它在节点的两次执行中不是持久的。这可以通过对您的代码做一些小改动来证明。
更改测试 2 文件以公开测试方法
// test/child/test2.js
var memcache = require("../../main");
exports.test = function(){
setInterval(
function () {
console.log(memcache.get("id1"));
},
3000
);
}
将值添加到缓存后,在 test1 中使用暴露的测试方法。
//test/test1.js
var memcache = require("../main");
var test2 = require("./child/test2");
memcache.set("id1", { name: "lola" });
test2.test();
然后 运行 test1 像你一样。
$ DEBUG=memcache:* node test/test1.js
这会给你预期的结果。