1
我真的被nodejs缓存系统困住了。我有这样的结构,我的项目:Node.js需要缓存
Project/
apps/
jobs_processor/
app.js
processors.js
processors/
libs/
queue_manager.js
queue_manager.js
需要processors.js
var processors = require("../apps/jobs_processor/processors.js");
app.js
要求也processor.js
var processors = require("./processors.js");
如果我考虑到的文档,我必须有相同的路径可能会获得相同的对象,是吗?如果是这样,我该如何实现(具有相同的路径)?
谢谢。
编辑:
如果找到了解决我的问题。 这里是queue_manager.js
文件
var _ = require("lodash");
var Utils = require("./utilities");
var Processors = require("../apps/jobs_processor/processors");
var Logger = require("./logger");
var QUEUES_CACHE = {};
exports.createJob = createJob;
exports.getCacheObject = getCacheObject;
function createJob(name, data) {
var cacheId = name.replace(/ /g, "_");
Logger.info("Cache ID: " + cacheId);
if (!QUEUES_CACHE[ cacheId ]) {
_.each(Processors, function (processor) {
Logger.debug("PROCESSOR NAME: " + processor.name);
Logger.debug("JOB NAME: " + name);
if (processor.name === name)
QUEUES_CACHE[ cacheId ] = processor;
});
if (!QUEUES_CACHE[ cacheId ])
throw new Error("Processor for job \"" + name + "\" not found.");
}
Logger.debug(Object.keys(QUEUES_CACHE));
return QUEUES_CACHE[ cacheId ].queue.add(data);
}
function getCacheObject() {
return QUEUES_CACHE;
}
的第一个版本,现在同一个文件
var _ = require("lodash");
var Utils = require("./utilities");
var Logger = require("./logger");
exports.createJob = createJob;
function createJob(name, data) {
var Processors = require("../apps/jobs_processor/processors");
var processor;
_.each(Processors, function (element) {
Logger.debug("Processor name: " + element.name);
if (element.name === name)
processor = element;
});
return processor.queue.add(data);
}
每次我叫createJob
方法的最后一个版本,我需要processors
模块,它是一个数组我创建的每个作业处理器。
在我的示例中,相对路径不同,因此高速缓存中有2个对象 – Ismael
@igorissen:错误。缓存由已解析的绝对路径键入,这将是相同的。 – SLaks
这很奇怪,因为我在'queue_manager.js'中记录了一个对象,并且在调用'createJob'方法时,我有两个不同的对象。 – Ismael