Nodejs全局variables和模块

是否有任何安全问题或使用全局variables和assignig模块到nodejs中的全局variables?

例:

client = new Client(); 

没有var语句,所以我可以在任何地方使用它?

这并不是一个安全问题,它被认为是不好的做法,它可能导致其他问题,如尝试覆盖Node.js全局variables。

尽量不要污染全局命名空间,如果你真的需要全局variables,只需要使用一个子对象。

我认为本身并不存在安全问题,但是您将会污染全局名称空间。 随着项目的增长(尤其是多个程序员),冲突的风险会变大。 如果你后来又添加了一个第三方库到你的项目有一个名为“client”的variables?

我一直在使用Node几年,而且我也遇到了同样的“问题”,令人沮丧。 不过,我可以给你我的解决scheme,它适用于我。

节点不允许以您所要求的方式使用全局variables,因为在模块中被定义为全局variables的variables只是该模块的全局variables。 但存在一个GLOBAL对象,禁止用于你所需要的。

全局variables在一般情况下(总是)是一个坏主意,但是在它自己的名字空间中有一个全局caching有用的函数并不是一种犯罪行为,因为它不会覆盖任何东西,并让你沿着你的代码使用它。 所以我会告诉你我在模块之间共享函数和对象的方式,并保持源代码的组织(这对我来说至less是重要的!):

1st创build一个资源文件,您可以在其中放置要在代码中共享的所有重要function和对象。 我从资源中称为“R.js”,R

2st定义将存储所有函数和对象并将其分配给节点的GLOBAL对象的“R”对象:

 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对象中创build你喜欢的共享函数,variables和对象

第五如果需要绕过代码,需要R.js文件并使用R对象访问它的成员

 R.<property_or_function> 

2警告说明。

  • 请记住始终调用共享函数或用户共享对象placind“R”。 在它前面
  • 尽pipe你可以在任何地方给R对象分配新的函数,对象和属性,但是如果你事先没有计划,这可能会导致和全局variables一样的不一致 – 也就是说,在分配给R之前调用一个共享函数作为一种方法,在R.js文件中创build所有内容,而不是在代码中完成。 这样,所有共享的东西都将在R.js中,这是唯一寻找共享代码的地方。