未加星标

Global variable vs. require.cache in NodeJS

字体大小 | |
[前端(javascript) 所属分类 前端(javascript) | 发布者 店小二03 | 时间 2018 | 作者 红领巾 ] 0人收藏点击收藏

I know using the global variable is discouraged in node, but assuming I need to store some data globally, which is a worse approach:

using global

Using the require cache directly to store an object, i.e.

require.cache["myGlobalVar"] == {};

I suspect that option 2 is worse because the require cache is intended to be used for modules.

More details: I thought about using require("myLibrary").myGlobalVar but that would require having myLibrary accessible to all the files calling it, which might not be possible in practice. I'm making a code coverage tool so I can expect the user to install "myLibrary" in their dev/test modules, but not necessarily in their src node_modules directory, to which the instrumented code files would refer.

Problem courtesy of: Alex Seville

Solution

Why don't you just create an in memory cache that all of your other code can then reference?

var memoryCache = module.exports = function () { var cache = {}; return { get: function (key) { return cache[key]; }, set: function (key, val) { cache[key] = val; } } }

You can then use the cache from any place by require'ing it.

var cache = require('../cache/memoryCache')(); cache.set('1234', 'value I want to share'); cache.get('1234'); // 'value I want to share'

Solution courtesy of: Bill

Discussion

The answer from Bill didn't work for me because it can in fact not be used "from any place by require'ing it" . This is because it's exporting a function that is called on each require and thus creating a blank new (empty) cache each time.

The solution is exporting an instance of the function...

// cache/memoryCache.js module.exports = function () { var cache = {}; return { get: function (key) { return cache[key]; }, set: function (key, val) { cache[key] = val; } } }();

...and then requiring that very instance each time.

// some other file var cache = require('../cache/memoryCache'); cache.set('1234', 'value I want to share'); cache.get('1234'); // 'value I want to share'

(Note the pair of parenthesis "()" that has moved from the require to the end of the function in the module.)

Discussion courtesy of: jox

This recipe can be found in it's original form on Stack Over Flow .

本文前端(javascript)相关术语:javascript是什么意思 javascript下载 javascript权威指南 javascript基础教程 javascript 正则表达式 javascript设计模式 javascript高级程序设计 精通javascript javascript教程

tags: cache,require,function,key,value,var,memoryCache
分页:12
转载请注明
本文标题:Global variable vs. require.cache in NodeJS
本站链接:https://www.codesec.net/view/586977.html


1.凡CodeSecTeam转载的文章,均出自其它媒体或其他官网介绍,目的在于传递更多的信息,并不代表本站赞同其观点和其真实性负责;
2.转载的文章仅代表原创作者观点,与本站无关。其原创性以及文中陈述文字和内容未经本站证实,本站对该文以及其中全部或者部分内容、文字的真实性、完整性、及时性,不作出任何保证或承若;
3.如本站转载稿涉及版权等问题,请作者及时联系本站,我们会及时处理。
登录后可拥有收藏文章、关注作者等权限...
技术大类 技术大类 | 前端(javascript) | 评论(0) | 阅读(57)