node.js设置全局变量

时间:2014-05-30 18:27:26

标签: node.js

我是节点js的新手。我在下面这个问题上搜索了很多堆栈溢出,没有我需要的东西。

我有一个app.js文件,它启动节点服务器和路由器文件。我希望能够存储一次全局值,并在包含我的函数的其他服务器端.js文件之间共享。我也想在我的.jade文件中访问这个变量。 (我用快递BTW)

有没有办法实现这个目标?

感谢。

3 个答案:

答案 0 :(得分:4)

Node.js文档在Module Caching

下说明
  

缓存模块在首次加载后进行缓存。这意味着(除其他外)每次要求的呼叫(' foo')都会   获得完全相同的返回对象,如果它将解析为相同   文件。

     

多次调用require(' foo')可能不会导致模块代码   多次执行。这是一个重要的特征。用它,   "部分完成"可以返回对象,从而允许传递   即使它们会导致循环,也要加载依赖项。

     

如果您想让模块多次执行代码,那么导出   一个函数,并调用该函数。

这意味着只需将全局对象放在自己的模块中即可轻松公开它。

//config.js
var config = {
   dbUrl: 'mogodb://localhost:2107/persons'
};

module.exports = config;

然后,当您想要访问该对象时,您只需执行以下操作:

var config = require('./config');

完成后,您可以随处访问同一个实例。

答案 1 :(得分:0)

您希望限制Node中全局变量的使用。这是因为与任何其他服务器端语言不同,Node是一个共享所有请求的持久进程。因此,您无法全局设置用户状态,因为这些状态将在访问您网站的所有用户之间共享。

在原始节点中,有两个全局上下文:

global.foo = 'bar';
// and the process object
process.some_var = 1;

在Express中,您可以设置应用程序范围的变量using app.set

但是,大多数情况下,您希望通过将数据添加到requestresponse对象来共享数据。那是因为那些对象是" user"细节,与全局命名空间不同。

对于模板,您总是希望传递上下文:

app.render('email', Object.assign( aSharedObject, {
  specific: 'values'
}));

答案 2 :(得分:0)

我会使用process.env,或者如果你正在使用nconf将它放入应用程序配置中,就像乔丹所说的那样,如果你不想包含nconf或任何其他conf模块或使用进程,全局变量是个坏主意。 .env然后你可以创建一个模块并导出一组getter和setter来处理值