node.js – 如何在nodejs中同步连接到mongodb

我想利用promises功能,我可以同步连接到 mongodb,我可以通过将连接传递给不同的模块来重用连接.

这是我想出来的东西

class MongoDB {

    constructor(db,collection) {      
      this.collection = db.collection(collection);
    }

    find(query,projection) {
        if(projection)
            return this.collection.find(query,projection);
        else
            return this.collection.find(query);
    }
}

class Crew extends MongoDB {

    constructor(db) {        
        super(db,'crews');
    }

    validate() {

    }
}

我想在我的初始代码中的某个位置设置一个连接,如下面的那个,然后重用不同类的连接,就像mongoose或monk那样,但只使用node-mongodb-native包.

MongoClient.connect(url)
          .then( (err,dbase) => {
                global.DB = dbase;
              });


var Crew = new CrewModel(global.DB);


Crew.find({})
   .then(function(resp) {
      console.log(resp);
   });

现在,db在主MongoDB类中返回undefined,并且无法通过谷歌或文档调试这个.

编辑:我曾假设承诺是同步的但事实并非如此.

解决方法

要重用连接,我会创建一个这样的模块.
module.exports = {

    connect: function(dbname,callback ) {
       MongoClient.connect(dbname,function(err,db) {

       _db = db;
       return callback( err );
    });
},getDb: function() {
        return _db;
     }
};

之后,您可以在启动应用程序之前连接到数据库

MongoConnection.connect("mongodb://localhost:27017/myDatabase",function(err){
    app.listen(3000,function () {
        // you code
    });
});

考虑到您在js文件中创建了模块,您只需使用require来获取databaseConnection

var dbConnection = require("./myMongoConnection.js");

并获得连接使用

var db = MongoConnection.getDb();

相关文章

这篇文章主要介绍“基于nodejs的ssh2怎么实现自动化部署”的...
本文小编为大家详细介绍“nodejs怎么实现目录不存在自动创建...
这篇“如何把nodejs数据传到前端”文章的知识点大部分人都不...
本文小编为大家详细介绍“nodejs如何实现定时删除文件”,内...
这篇文章主要讲解了“nodejs安装模块卡住不动怎么解决”,文...
今天小编给大家分享一下如何检测nodejs有没有安装成功的相关...