2012-08-16 41 views
0

如何在大項目中組織Mongodb本機驅動程序?Node.js Mongodb本機驅動組織

此刻,我在每個「模型」中使用此代碼,這基本上只是模塊中的一個對象。

users.js

var mongo = require('mongodb'); 

var Users = {}; 

Users.db = new mongo.Db(...); 

Users.db.open = function(e, c){ 
    if(e){ throw new Error(e); } else { 
    console.log('connection opened'); } 
}; 

Users.c = Users.db.collection('users'); 

Users.login = function(username, rawPassword, callback){ 
    Users.c.findOne({ username: username }, function(e, o){ 
    if(o.password === encrypt(rawPassword)){ callback(o); } 
    else { callback(null); } 
    }); 
}; 

但是這會不會開在每個分離模型的數據庫連接的最佳方式?如何正確共享模型之間的連接?這會是一個很好的解決方案:

數據庫connections.js

var mongo = require('mongodb'); 
var RedisClient = require('redis-client'); 

module.exports = { 
main: new mongo.Db(...), 
log: new mongo.Db(...), 
cache: new RedisClient(...) 
}; 

所以每次我們使用一個數據庫連接時,我們可以使用它代替:

users.js

var mainDb = require('database-connections.js').main; 
var logDb = require('database-connections.js').log; 
var cacheDb = require('database-connections.js').cache; 

mainDb.open(function(e, c)){ 
    if(e){ throw new Error(e); } else { 
    mainDb.collection('users', function(e, c){ 
     // do work. 
    }); 
    } 
}); 

回答

1

我在回答之前的question時說過,mongodb-native api很笨重,很難使用。我想我們可以在這裏看到爲什麼。

使用mongojs

users.js

var db = require("mongojs").connect('maindb', ['users']); 

    db.users.find({}, 

    function(err, results){ 

    //do something with the results 

    }) 

我想這簡單得多,並且將運行得更好了較大的應用程序。

相關問題