是否有任何安全问题或使用全局变量和将模块分配给nodejs中的全局变量?
示例:
client = new Client();
没有var
语句,我可以在任何地方使用它吗?
答案 0 :(得分:6)
这不是一个安全问题,但它被认为是不好的做法,它可能导致其他问题,例如尝试覆盖Node.js全局变量。
尽量不要污染全局命名空间,如果你真的需要全局变量,只需使用一个子对象。
答案 1 :(得分:2)
我认为本身并不存在安全问题,但您将污染全局命名空间。随着项目的增长(特别是对于一个以上的程序员),冲突的风险会越来越大。如果您稍后在项目中添加一个名为“client”的变量的第三方库,该怎么办?
答案 2 :(得分:1)
我已经使用Node几年了,我遇到了同样的“问题”并且令人沮丧。不过,我可以给你解决方案,它对我有用。
节点不允许您提出全局变量,因为模块中定义为全局的变量仅对该模块是全局。但是存在一个禁止用于你需要的GLOBAL对象。
全局变量通常是一个坏主意(总是如此),但在它自己的命名空间中拥有有用函数的全局缓存并不是一种犯罪,因为它不会覆盖任何内容并允许您在代码中使用它。所以我会告诉你我在模块之间共享功能和对象的做法,并保持源的有序组织(至少对我来说很重要!):
1st 创建一个资源文件,您可以在其中放置要在代码中共享的所有重要功能和对象。我称之为“R.js”,R来自Resources
2st 定义将存储所有函数和对象的“R”对象,并将其分配给节点的GLOBAL对象:
var R = {};
GLOBAL.R = R; // Adds resource module to global
3rd 为了简单起见,避免额外需要所有代码,我需要在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个警告说明。