2014-01-05 62 views
0

我有一個Express.js節點網絡應用程序。在我的app.js,我生成應用程序初始化過程中的字符串:訪問產生的值需要()

// app.js 
var mongourl = /* based on process.env.VCAP_SERVICES constant */; 

現在,我有我加載到app.js通過需要()的腳本:

// app.js 
var db = require('./db'); 

這個腳本需要使用我的app.js中定義的mongourl變量。執行此操作的好方法是什麼?我發現,我可以只設置字符串作爲process.env值,例如

// app.js 
process.env.mongourl = /* creating the string */; 

然後可以在db.js通過process.evn.mongourl進行訪問,但我不知道這是否是一個很好的模式。

回答

0

我不知道這是否是一個很好的模式

實在不行,你只污染不屬於你的全局對象。考慮至少使用一個名稱空間。

+0

正如'process.env.FOO.mongourl'? –

0

更慣用的方法是創建數據庫連接這需要字符串構造函數。

它不必是一個實際的構造函數,你可以只添加

var dburl; 
exports.init = function(param) { 
    dburl = param: 
} 

環境變量並不意味着真的,因爲它們是全局的,可以看出(與碰撞)等模塊。顯式設置意味着它是本地的,如果你需要異步,你可以更明確地控制它的定義。

1
// in db.js you could require an app config.js file 
var config = require('config'); 
// then access via config.db.url 

// or you can pass stuff to modules 
var db = require('./db')(mongourl); 

// or in app.js use app.set() 
app.set('mongourl', mongourl); 
// then wherever you need it: app.get('mongourl') 
+0

W.r.t選項#2以上,請注意要求()預計將返回一個函數,它的蒙戈URL作爲參數。因此,DB模塊會需要這樣的東西: VAR db_url; module.exports =函數(URL){db_url = URL; .....}; – ravi