2013-12-14 49 views
1

所以我採用最常見的或推薦的方法將參數,模塊或參數傳遞到其他模塊,例如將params傳遞給模塊的最常見方法是什麼?

var crypto = require('crypto'); 
var express = require('express'); 
var mongoose = require('mongoose'); 
var OAuth = require('oauth').OAuth2; 

var app = express(); 
var config = require('./config.js')(app, crypto, mongoose, OAuth); 
var models = require('./models')(mongoose); /*etc.*/ 

還是會被認爲是更常見的延伸app例如

var express = require('express'); 
var app = express(); 

app.crypto = require('crypto'); 
app.mongoose = require('mongoose'); 
app.OAuth = require('oauth').OAuth2; 

var config = require('./config.js')(app); 
var models = require('./models')(app); /*etc.*/ 

或者擴展其他對象並通過例如其他對象會更安全。

var express = require('express'); 
var app = express(); 
var modules = {}; 

modules.crypto = require('crypto'); 
modules.mongoose = require('mongoose'); 
modules.OAuth = require('oauth').OAuth2; 

var config = require('./config.js')(app, modules); 
var models = require('./models')(app, modules); /*etc.*/ 

或者,所有這些邊緣情況下,我應該採取其他方法?

我不想在每次需要在我的應用程序中使用OAuth時構建新的OAuth2實例,所以我當前在配置中創建了一個OAuth2實例,然後將配置傳遞給我的路由;我是否仍然可以這樣做,並且在每個模塊中都需要config.js(例如routes.js)?

回答

0

在你的情況下,你不把crypto,mongoose和Oauth2作爲參數。

你的代碼應該是這樣的:

// app.js

var express = require('express'); 
var app = express(); 
var config = require('./config.js')(app); 
var models = require('./models')(app); 

// config.js或models.js

var crypto = require('crypto'); 
var mongoose = require('mongoose'); 
var OAuth = require('oauth').OAuth2; 

module.exports = function (app) { 
    // your code 
} 

都需要( '貓鼬')會共享相同的實例。如果你在app.js上調用mongoose.connect(),那麼config.js和models.js也會被連接。


世界上有一些可能會發送所需模塊作爲參數的軟件包,因爲他們遇到了版本衝突的麻煩。但是,這只是happend當config.js和models.js分離模塊(模塊它有它自己的package.json)


關於你的3個例子:

  • 第一是確定
  • 第二個是壞的,它應該是require('./ config.js)(options); //選項= {...}
  • 第三是好的
+0

謝謝,我在示例中將'global'更改爲'modules';我不打算在Node.js中使用全局對象。最後一個例子仍然是不好的做法? –

+0

更新:),沒關係,我認爲我們應儘可能減少模塊之間的依賴關係和關係 – damphat

相關問題