gpt4 book ai didi

javascript - 需要相同的模块,不同的路径,不共享的变量

转载 作者:行者123 更新时间:2023-11-29 21:43:53 25 4
gpt4 key购买 nike

我真的不知道 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 ];
}

第一个测试文件添加一个item

//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

有什么建议我怎样才能要求相同的模块具有不同的路径,并且仍然具有相同的变量?

谢谢。

最佳答案

您的缓存不是真正的内存缓存,它只是一个保存值的对象。所以它在 Node 的两次执行中不是持久的。这可以通过对您的代码进行少量更改来证明。

更改测试 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

这会给你预期的结果。

关于javascript - 需要相同的模块,不同的路径,不共享的变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31937131/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com