Использование одноэлементного подхода для модулей node.js - PullRequest
1 голос
/ 13 апреля 2019

Я использую кэш-узел в моем выраженном приложении.Его нужно настроить, используя следующий код:

const NodeCache = require( "node-cache" );
const myCache = new NodeCache( { stdTTL: 100, checkperiod: 120 } );

После этого его можно использовать как

myCache.get(key)

У меня проблема в том, что в экспресс-настройке у меня есть маршрутыявляются динамическими, и я не могу получить доступ к константе myCache, объявленной в index.js. Я читаю модули и понимаю, что они кэшируются, и каждый новый вызов, для которого требуются вызовы, получает кэшированную версию.

Чтобы преодолеть мою проблему и быть в состояниидля вызова одного и того же объекта из любого маршрута, который я подумал использовать в моих маршрутах следующий метод синглтон-иш:

var nodeCache = require('node-cache');

if (!nodeCache.instance) {
    nodeCache.instance = new nodeCache({ stdTTL: 3600 });
}

nodeCache.instance.get('key');

Кажется, это работает хорошо, но я не совсем уверен в этой настройке, если это что-тоэто должно быть сделано, или если есть лучшие альтернативы.

1 Ответ

1 голос
/ 13 апреля 2019

Модули CommonJS оцениваются при первом импорте и могут естественным образом предоставлять синглтоны в качестве экспортируемых значений.

Модуль cache.js может быть:

var nodeCache = require('node-cache');

module.exports = new nodeCache({ stdTTL: 3600 });

Затем один и тот же экземпляр кэша узла импортируется из файла cache.js везде, где он используется.

...