node.js设置一个全局variables
我是新的节点js。 我在下面的这个问题上search了很多堆栈溢出,没有我需要的东西。
我有一个app.js文件,它启动节点服务器和路由器文件。 我希望能够存储一次全局值,并在包含我的函数的其他服务器端.js文件共享。 我也希望这个variables可以在我的.jade文件中访问。 (我用快递BTW)
有没有办法做到这一点?
谢谢。
Node.js文档在模块caching下说
caching模块在第一次被加载后被caching。 这意味着(除其他外)每个调用require('foo')将返回完全相同的对象,如果它将parsing为相同的文件。
多次调用require('foo')可能不会导致模块代码被多次执行。 这是一个重要的function。 有了它,“部分完成”的对象可以被返回,从而允许传递依赖被加载,即使它们会导致循环。
如果你想要一个模块多次执行代码,那么导出一个函数,然后调用这个函数。
这意味着只需将它放在自己的模块中就可以轻松地公开一个全局对象。
//config.js var config = { dbUrl: 'mogodb://localhost:2107/persons' }; module.exports = config;
然后当你想访问这个对象时,你只需要:
var config = require('./config');
这样做,你可以在任何地方访问同一个实例。
你会想限制Node中全局variables的使用。 这是因为与任何其他服务器端语言不同,Node是共享所有请求的持续进程。 因此,您不能在全局范围内设置用户状态,因为这些用户状态将在访问您的网站的所
在原始节点中,有两个全局上下文:
global.foo = 'bar'; // and the process object process.some_var = 1;
在Express中,您可以使用app.set
来设置应用程序的variables
但是,大多数情况下,您希望通过将数据添加到request
或response
对象来共享数据。 这是因为这些对象是“用户”特定的,不像全局命名空间。
对于这个模板,你总是希望在上下文中传递:
app.render('email', Object.assign( aSharedObject, { specific: 'values' }));
我会使用process.env或者如果你使用nconf把它放到应用程序configuration中,就像Jordan所说的那样,全局variables是BAD的想法,如果你不想包含nconf或者其他的conf模块或者使用process.env,那么你可以创build一个模块并导出一组getter和setter来处理这个值