如何在Node.js中导出mongo数据库处理程序?

时间:2015-10-01 02:25:50

标签: node.js mongodb commonjs

我是Node和Mongo的新手,我试图在一个文件中连接mongo数据库并将数据库处理程序导出到许多其他文件,这样我就不需要在所有需要连接的文件中连接到数据库它。以下是我尝试这样做的方法

// db.js
var client = require('mongodb').MongoClient
var assert = require('assert')
var url = 'mongodb://localhost:27017/test'

client.connect(url, (err, db) => {
  assert.equal(err, null)
  module.exports = db
})

导出db处理程序后,我尝试在另一个文件中访问它的方法,如下所示

var db = require('./db')
console.log(db.collection('col'))

但它抛出一个TypeError,说db.collection不是函数。如何在其他文件中访问db handler的方法?

3 个答案:

答案 0 :(得分:2)

你需要导出函数,它需要callback1。当想要的参数无法获取时,将callback1设置为关于异步函数的callback2。

db.js

const MongoClient = require('mongodb').MongoClient;
const assert = require('assert');
let callback, db;
// Connection URL
const url = 'mongodb://localhost:27017';

// Database Name
const dbName = 'myproject';
// Use connect method to connect to the server
MongoClient.connect(url, function(err, client) {
  assert.equal(null, err);
  console.log("Connected successfully to server");

  db = client.db(dbName);
  callback(db)

  client.close();
});

module.exports = function(cb){
  if(typeof db != 'undefined' ){
    cb(db)
  }else{
    callback = cb
  }
}

other.js

const mongo = require("./db");
mongo((db) => {
     //here get db handler
})

答案 1 :(得分:1)

这对我有用。我初始化集合对象并将每个集合附加到它。然后导出那个。

 const MongoClient = require('mongodb').MongoClient;

 let collections = {}

   MongoClient.connect(url, function(e, client) {
    if(e) {
      console.log(e)
      throw {error:'Database connection failed'}
     }

     let db = client.db('example-db');
     collections.users = db.collection('users')
   });

   module.exports = collections

然后在其他文件中

  const collections  = require('../db/mongo')
  collections.users.findOne({userName:'userName'})

如果您愿意,可以导出集合和数据库。这样您就可以使用db在其他地方创建其他集合和索引。

   module.exports = {
       db:db,
       collections:collections
    }

答案 2 :(得分:0)

可能最好的办法是只使用回调导出init()函数,然后在使用其他db方法之前调用它。否则,你可以尝试检查它是否在每个db访问方法的顶部初始化,但这可能实际上不是一个更易于维护的解决方案,因为它使它变得更复杂。