同步连接到mongodb

时间:2014-09-18 09:14:54

标签: node.js mongodb

我想首先连接到mongodb,然后在我的应用程序中运行其他所有内容。

要做到这一点,我必须写一些像:

MongoClient.connect("mongodb://localhost/test", function(err, connection) {
    if (err) { console.error(err); }
    db = connection;

    var app = express();

    // Include API V1
    require("./apiv1.js")(app, db);

    app.listen(3000, function(err) {
        if (err) { console.error(err); } else { console.log("Started on *:3000"); }
    });
});

这使得我的应用程序在.connect函数中完全缩进...在我处理项目时,它看起来很丑陋,占用空间。

我认为最好的解决方案是将MongoDB连接同步(即使因为没有数据库连接,我的应用程序无法工作,所以为什么我应该在连接时做一些事情?)然后运行我的其余代码。

我该怎么办?

4 个答案:

答案 0 :(得分:30)

你无法同步连接到MongoDB,但你可以从你的代码中删除这个丑陋的回调。

最好的方法是在node-mongodb-native driver周围采用一些包装。

看看以下模块。


mongojs

var mongojs = require('mongojs');
var db = mongojs('localhost/test');
var mycollection = db.collection('mycollection');

mongoskin

var mongo = require('mongoskin');
var db = mongo.db("mongodb://localhost:27017/test", {native_parser:true});

monk

var monk = require('monk');
var db = monk('localhost/test');
var users = db.get('users')

当然,内部所有人都是异步建立MongoDB连接。

答案 1 :(得分:3)

使用async库,您可以解决其中的一些问题。

例如,在我的服务器启动中,我执行以下操作:

async.series([
    function(callback){
        // Initialize the mongodb connection and callback on completion in init.
        db.init(function(){
            callback();
        });
    },
    function(callback){
        // Listen on requests etc.
        webServer.init(function(){
            callback();    
        });
    },
    function(callback){
        // Set up anything else that I need
        callback();
    }
]);

答案 2 :(得分:0)

如果您使用的是Node 6及更高版本,则可以执行以下操作:

const MongoClient = require('mongodb').MongoClient;
const url = 'mongodb://localhost:27017/mydb';
let db = null;
getdb();

//your code

async function getdb() {
     db = await MongoClient.connect(url);
}
  1. 带上mongodb库。
  2. 声明网址常量。
  3. 将变量db声明为null。
  4. 调用getdb函数。
  5. 创建具有异步字
  6. 的getdb函数
  7. 使用关键字await为db变量分配连接的结果。

答案 3 :(得分:0)

您可以使用thunky执行此操作,thunky执行一次异步功能并缓存它,后续调用将从缓存中返回。

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

var connect = thunky(function(cb){
 let url = 'mongodb://localhost:27017/test';
 MongoClient.connect(url, function(err, client){
    console.log('connecting')
    cb(err, client);
 })
})

connect( (err, client) => {
  console.log('connection 1')
})

connect( (err, client) => {
  console.log('connection 2')
})

connect( (err, client) => {
  console.log('connection 3')
  console.log('closing')
  client.close();
})

*注意:我使用的是最新的3.x mongodb驱动程序