我想利用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();