2014-07-12 34 views
2

我都需要訪問數據庫,發展多條路我使用本地數據庫,顯然生產我使用託管數據庫是否有可能在節點/ Express來聲明全局變量4.0

唯一的問題是每次我去推釋放,我必須通過每條路徑手動更改數據庫鏈接

例如

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

這將是很好,如果我能在app.js聲明一個變量,像

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

然後在每個文件做這樣的事情 var mongodb = require('mongojs').connect(app.get('mongoDBAddress'), ['Collection']);

有誰知道這是可以實現我一直在爲它花費一個小時左右的時間搜索並試圖包含不同的東西,但我沒有運氣。謝謝。

回答

2

docs

在瀏覽器中,頂層範圍全局範圍。這意味着,如果您在全球範圍var something中,則瀏覽器中的 將定義全局變量 。在Node中,這是不同的。全球範圍內的頂級範圍不是 ; var something裏面的Node模塊將會是本地 那個模塊

你必須有不同的想法。而不是創建一個全局對象,創建模塊,因此他們採取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 

這是快遞的慣例,以及其他庫。 app位於您的主文件(即index.js)中,您需要的模塊有app參數。

您可以將一個全局變量添加到GLOBAL,請參閱this question,雖然這可能被認爲是不好的做法。

+1

不是。有一個全局範圍,只是它不是模塊的頂層範圍。你的第一句話聽起來好像每個模塊都有自己的* global *作用域,這是不正確的。 – Bergi

+0

@Bergi:是的...我只是留下文檔中的引用。 – elclanrs

0

我們有兩個方法在node.js中共享模塊中的變量。

  1. 全球
  2. module.export

但你的問題似乎是不同的,我得到了什麼是你想要你的應用到不同的數據庫連接而無需更改代碼。你需要做的是使用命令行PARAMS

For more ref

服務器。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]] 
}