Node.js Mongodb 原生驱动组织

Node.js Mongodb native-drive organisation

本文关键字:原生 js Mongodb Node      更新时间:2023-09-26

如何在一个大项目中组织Mongodb原生驱动程序?

目前,我在每个"模型"中都使用此代码,该模型基本上只是模块中的一个对象。

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

在我回答你之前的问题时,我说mongodb原生api笨重且难以使用。我想我们可以在这里看到原因。

使用 mongojs

用户.js

var db = require("mongojs").connect('maindb', ['users']);
    db.users.find({}, 
    function(err, results){
    //do something with the results
    })

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