[英]Nodejs global variables and modules
在nodejs中使用全局变量和assignig模块到全局变量是否存在任何安全问题?
例:
client = new Client();
没有var
语句,所以我可以在任何地方使用它?
并不是说这是一个安全问题,尽管它被认为是不好的做法,但它可能导致其他问题,例如尝试覆盖Node.js全局变量。
尽量不要污染全局名称空间,如果确实需要全局变量,则仅将其与子对象一起使用。
我认为本质上并没有安全问题,但是您将污染全局名称空间。 随着项目的增长(尤其是拥有多个程序员),冲突的风险会越来越大。 而且,如果您以后在项目中添加一个具有名为“ client”的变量的第三方库,该怎么办?
我已经使用Node两年了,但是我遇到了同样的“问题”,并且令人沮丧。 不过,我可以给您我所达成的解决方案,它对我有用。
Node不允许您按照要求的方式使用全局变量,因为模块中定义为全局的变量仅对该模块而言是全局的。 但是存在一个禁止用于您需要的GLOBAL对象。
全局变量通常(总是)是个坏主意,但是在其自己的名称空间中拥有有用函数的全局缓存完全不是犯罪,因为它不会覆盖任何内容,而是让您在代码中使用它。 因此,我将告诉您如何在模块之间共享功能和对象并使源代码井井有条(至少对我来说很重要!):
1st创建一个资源文件,在其中放置要在代码中共享的所有重要功能和对象。 我称我的“ R.js”,R来自资源
2st定义将存储所有函数和对象的“ R”对象,并将其分配给节点的GLOBAL对象:
var R = {};
GLOBAL.R = R; // Adds resource module to global
第三为了简单起见,避免多余的代码,我在R.js中做了所有需要的代码。 之后,您只需要将它们与R.require_variable.function_or_property一起使用
// All needed requires
R.fs = require('fs');
R.net = require('net');
R.http = require('http');
R.dbClient = require('mysql').Client;
...
4th在R对象中创建您喜欢的共享函数,变量和对象
5th在需要代码的地方,需要R.js文件并使用R对象访问它的成员
R.<property_or_function>
2警告提示。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.