Baz*_*777 6 mongodb node.js node-mongodb-native
我想利用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() {
}
}
Run Code Online (Sandbox Code Playgroud)
我想在我的初始代码中的某个位置设置一个连接,如下面的那个,然后重用不同类的连接,就像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);
});
Run Code Online (Sandbox Code Playgroud)
现在,db在主MongoDB类中返回undefined,并且无法通过谷歌或文档调试这个.
编辑:我曾假设承诺是同步的但事实并非如此.
小智 7
要重用连接,我会创建一个这样的模块.
module.exports = {
connect: function(dbName, callback ) {
MongoClient.connect(dbName, function(err, db) {
_db = db;
return callback( err );
});
},
getDb: function() {
return _db;
}
};
Run Code Online (Sandbox Code Playgroud)
之后,您可以在启动应用程序之前连接到数据库
MongoConnection.connect("mongodb://localhost:27017/myDatabase", function(err){
app.listen(3000, function () {
// you code
});
});
Run Code Online (Sandbox Code Playgroud)
考虑到您在js文件中创建了模块,您只需使用require来获取databaseConnection
var dbConnection = require("./myMongoConnection.js");
Run Code Online (Sandbox Code Playgroud)
并获得连接使用
var db = MongoConnection.getDb();
Run Code Online (Sandbox Code Playgroud)