0

如何在一个大项目中组织 Mongodb native-driver?

目前我在每个“模型”中使用这个代码,它基本上只是模块中的一个对象。

用户.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); }
  });
};

但这会是在每个分离模型中打开数据库连接的最佳方式吗?如何正确共享模型之间的连接?这是一个很好的解决方案:

数据库连接.js

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

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

所以每次我们使用数据库连接时,我们都可以使用它:

用户.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.
    });
  }
});
4

1 回答 1

1

在我对您之前的问题的回答中,我说 mongodb-native api 笨重且难以使用。我想我们可以在这里看到原因。

使用 mongojs

用户.js

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

    db.users.find({}, 

    function(err, results){

    //do something with the results

    })

我认为这很简单,并且对于更大的应用程序会更好。

于 2012-08-17T00:08:13.650 回答