node.js 定义一个只读不可删除的全局变量
· 阅读需 1 分钟
node.js 下如何定义一个只读不能删除的全局变量呢?使用下面的方法:
var mongodbClients = require('./lib/common/mongodb_helper');
Object.defineProperty(global, "mongodbClient", {
value: mongodbClients,
writable: false,
configurable: false
});
这样就创建了一个 mongodbClient 的全局变量,如何使用的呢?
global.mongodbClients.xxxx 这里可以直接调用 ./lib/common/mongodb_helper 文件里暴露出来的方法.
这样做的价值是什么
把某个全局对象设成只读、不可重新配置,主要是为了避免后续代码在运行过程中被意外覆盖。对数据库连接、全局配置、常驻工具对象这类关键资源来说,这种保护非常有用。
但也不要把全局变量滥用
虽然 Object.defineProperty 能把全局对象保护起来,但这不意味着所有共享对象都该往 global 上挂。真正适合这样做的,应该是很少变、更接近基础设施层的能力。如果业务对象也这样处理,后面排查依赖关系反而会更麻烦。
所以更合理的理解是:这是一种保护关键全局资源的手段,而不是鼓励无限制使用全局变量。
