Nodejs全局变量和模块



是否有任何安全问题或使用全局变量并将模块分配给nodejs中的全局变量?

的例子:

client = new Client();
没有var语句,所以我可以在任何地方使用它?

这不是一个安全问题,但它被认为是不好的做法,尽管它可能导致其他问题,如试图覆盖一个Node.js全局变量。

尽量不要污染全局命名空间,如果你真的真的需要全局变量,就把它和子对象一起使用。

我认为这本身没有安全问题,但是您会污染全局命名空间。随着项目的增长(特别是有多个程序员),冲突的风险会越来越大。如果你后来在你的项目中添加了一个第三方库,它有一个名为"client"的变量,该怎么办?

我已经使用Node好几年了,我遇到了和你一样的"问题",这让我很沮丧。然而,我可以给你我找到的解决方案,它对我有效。

Node不允许以你要求的方式使用全局变量,因为在模块中定义为全局的变量仅对该模块是全局的。但是存在一个GLOBAL对象,可以用来满足您的需要。

全局变量通常(总是)是一个坏主意,但是在它自己的命名空间中有一个有用函数的全局缓存根本不是犯罪,因为它不会覆盖任何东西,并允许您在代码中使用它。因此,我将告诉您我是如何在模块之间共享函数和对象并保持源代码组织的(至少对我来说这很重要!):

1st创建一个资源文件,在其中放置您希望在代码中共享的所有重要函数和对象。我把我的叫做"R.js",R来自资源

2st定义将存储所有函数和对象的"R"对象,并将其分配给node的GLOBAL对象:

var R = {};
GLOBAL.R = R; // Adds resource module to global

3rd为了简单和避免代码周围的额外要求,我在R.js中完成了所有需要的要求。之后你只需要在r.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;
...

4 在R对象中创建共享函数、变量和对象

第5 在你的代码需要的地方,需要R.js文件,并通过使用R对象

访问它的成员
R.<property_or_function>

2个警告说明。

  • 记住总是调用共享函数或用户共享对象,在它前面加上"r"
  • 虽然你可以在任何地方为R对象分配新的函数、对象和属性,但如果你没有提前计划,这可能会导致与全局变量相同的不一致——也就是说,你在将其分配给R之前调用共享函数——所以作为一种方法,在R.js文件中创建一切,而不是在你的代码中做所有的事情。这样,所有共享的东西都将在R.js中,这是寻找共享代码的唯一地方。

最新更新