我從頭開始在Node.js中構建一個Web服務器(不明確,沒有貓鼬)。我的代碼(大大簡化)看起來是這樣的:用於處理Node.js中的變量作用域的方法
var app = {};
app.config = require('./config');
app.http = require('http');
app.router = require('./router');
app.mongoDb = require('mongodb');
app.mongoClient = app.mongoDb.MongoClient;
app.mongoClient.connect(
'mongodb://'
+ app.config.db.server + ':'
+ app.config.db.port + '/'
+ app.config.db.catalog, function(err, db) {
if (!err) {
app.db = db;
app.httpServer = app.http.createServer();
app.httpServer.on('request', function(req, response) {
req.app = app;
req.response = response;
req.value = {};
app.router.main(req);
});
app.httpServer.listen(app.config.port);
}
});
基本上我定義的一切,一個叫app
變量中,是全球性的。我連接數據庫並創建一個http服務器,然後我將app
放入事件處理程序的請求對象(req
)中。我還將響應對象(response
)和空值對象(value
)置於req
之下。所以現在,如果我用app.router.main(req)
調用路由器功能,我只需要將req
傳遞給它,我仍然可以訪問所有全局內容以及與請求相關的請求,響應和任何其他值。它似乎工作正常。
我對這個做法的問題是:
- 有沒有讓我所有的對象時,我需要他們的一個更簡單的方法?
req
對象的通過是否會對性能產生顯着的不利影響?- 這可能會導致與數據庫連接,請求,響應或我的應用程序的任何其他部分有關的不可預見的問題?
更簡單的方法是隻使用了一個框架。否則,整個模塊的構造函數/初始值設定項。或者只是把東西放在一個文件中,因爲模塊對於這類事情並不是很好。 – Ryan 2013-02-20 15:44:26