是否可以在Node / Express 4.0中声明全局variables?

我有多个路由,需要访问数据库,为开发我使用本地数据库,显然生产我使用托pipe数据库

唯一的问题是我每次去推释放,我必须通过每个path手动更改数据库链接

例如

var mongodb = require('mongojs').connect('urlhere', ['Collection']);

如果我可以在app.js声明一个variables就好了

app.set('mongoDBAddress', 'urlhere');

然后在每个文件中做类似于var mongodb = require('mongojs').connect(app.get('mongoDBAddress'), ['Collection']);

有谁知道这是否可以实现我已经搞了大约一个小时的谷歌search,试图包括不同的东西,但我没有运气。 谢谢。

从文档 :

在浏览器中,顶级范围是全局范围。 这意味着在浏览器中,如果你在全局范围内, var something将会定义一个全局variables。 在Node中,这是不同的。 顶级范围不是全球范围; 在Node模块内var something将在本地模块

你必须有不同的想法。 而不是创build一个全局对象,创build你的模块,让他们拿一个app实例,例如:

 // add.js module.exports = function(app) { // requires an `app` return function add(x, y) { // the actual function to export app.log(x + y) // use dependency } } // index.js var app = {log: console.log.bind(console)} var add = require('./add.js')(app) // pass `app` as a dependency add(1, 2) //^ will log `3` to the console 

这是Express和其他图书馆的惯例。 app在你的主文件(即index.js )中,你需要的模块有一个app参数。

你可以给GLOBAL添加一个全局variables,看看这个问题 ,虽然这可能被认为是不好的做法。

我们有两个方法在node.js中共享模块内的variables。

  1. 全球
  2. module.export

但是你的问题似乎有所不同,我得到的是你想要连接你的应用程序到不同的数据库,而不改变代码。 你需要做的是使用命令行参数

更多参考

server.js

 var connectTo = { dev : "url1" production : "url2" } var mongodb = require('mongojs').connect(connectTo[process.argv[2]], ['Collection']); 

运行你的server.js

 node server.js dev // for connecting to development database 

要么

 node server.js production // for connecting to prodiction database 

跨不同模块共享连接

 //Method 1 global.mongodb = require('mongojs').connect(connectTo[process.argv[2]], ['Collection']); //Method 2 exports.mongodb = require('mongojs').connect(connectTo[process.argv[2]], ['Collection']); exports.getMongoDBAddress = function() { return connectTo[process.argv[2]] }