对 node.js 个模块使用单例方法
Using a singleton-ish approach for node.js modules
我在基于表达的应用程序中使用节点缓存。需要使用以下代码进行设置;
const NodeCache = require( "node-cache" );
const myCache = new NodeCache( { stdTTL: 100, checkperiod: 120 } );
之后可以像
一样使用
myCache.get(key)
我遇到的问题是,在快速设置中,我的路由是动态的,我无法访问 index.js 中声明的 myCache 常量调用 require 的调用获取缓存版本。
为了克服我的问题并能够从我想到的任何路由调用相同的对象,我想在我的路由中使用以下单例方法;
var nodeCache = require('node-cache');
if (!nodeCache.instance) {
nodeCache.instance = new nodeCache({ stdTTL: 3600 });
}
nodeCache.instance.get('key');
这似乎工作得很好,但我不太确定这个设置,如果这是应该做的事情,或者是否有更好的选择。
CommonJS 模块在第一次导入时进行评估,并且能够自然地提供单例作为导出值。
cache.js 模块可以是:
var nodeCache = require('node-cache');
module.exports = new nodeCache({ stdTTL: 3600 });
然后从 cache.js 任何使用它的地方导入相同的节点缓存实例。
我在基于表达的应用程序中使用节点缓存。需要使用以下代码进行设置;
const NodeCache = require( "node-cache" );
const myCache = new NodeCache( { stdTTL: 100, checkperiod: 120 } );
之后可以像
一样使用myCache.get(key)
我遇到的问题是,在快速设置中,我的路由是动态的,我无法访问 index.js 中声明的 myCache 常量调用 require 的调用获取缓存版本。
为了克服我的问题并能够从我想到的任何路由调用相同的对象,我想在我的路由中使用以下单例方法;
var nodeCache = require('node-cache');
if (!nodeCache.instance) {
nodeCache.instance = new nodeCache({ stdTTL: 3600 });
}
nodeCache.instance.get('key');
这似乎工作得很好,但我不太确定这个设置,如果这是应该做的事情,或者是否有更好的选择。
CommonJS 模块在第一次导入时进行评估,并且能够自然地提供单例作为导出值。
cache.js 模块可以是:
var nodeCache = require('node-cache');
module.exports = new nodeCache({ stdTTL: 3600 });
然后从 cache.js 任何使用它的地方导入相同的节点缓存实例。