我将NodeJS与MongoDB一起使用,并且在将mongoDB对象传递给我的所有原型函数时遇到了一些问题。我不明白如何在这些原型之间传递这个对象。也许有人可以指出我正确的方向?
在我的主文件中,我创建了一个mongoDB对象的新实例,其中包含了我想用来处理mongoDB的所有原型。然后我使用原型函数来连接并创建一个新的集合。
Main.js
var mongo = require('./database/mongoDB')
var mongoDB = new mongo();
// Connect to database
mongoDB.ConnectDB(dbPath);
// Create a collection
mongoDB.CreateNewCollection("Usernames");
原型函数在MongoDB.js中定义
MongoDB.js
// Get mongoDB
var mongoDB = require('mongodb').MongoClient;
var DatabaseOperations = function () {}; // Constructor
DatabaseOperations.prototype.ConnectDB = function(dbPath){
// Connect to database
mongoDB.connect(dbPath, function(err, mongoDatabase) {
if(!err) {
console.log("Connected to database: " + dbPath);
mongoDB.database = mongoDatabase;
} else {
console.log("Could not connect to database, error returned: " + err);
}
});
}
DatabaseOperations.prototype.CreateNewCollection = function(collectionName){
mongoDB.database.createCollection(collectionName, function(err, collectionName){
if(!err) {
console.log("Successfully setup collection: " + collectionName.Username);
mongoDB.collectionName = collectionName;
} else {
console.log("Could not setup collection, error returned: " + err);
}
});
}
我能够连接到数据库,但从那里开始,我不知道如何将数据库对象传递给其他原型函数,以便创建集合或使用它做任何其他事情。运行它时得到的错误信息是:
mongoDB.database.createCollection(collectionName, function(err, collection
TypeError: Cannot read property 'createCollection' of undefined
如何将数据库对象放入每个原型函数中以使用它?
答案 0 :(得分:1)
我看到你找到了另一种解决方案,但无论如何我都会发表评论。在构造函数内部,您应该执行类似
的操作MongoDB.js
// Get mongoDB
var mongoDB = require('mongodb').MongoClient;
var DatabaseOperations = function () {}; // Constructor
DatabaseOperations.prototype.ConnectDB = function(dbPath){
// Connect to database
var that = this;
mongoDB.connect(dbPath, function(err, mongoDatabase) {
if(!err) {
console.log("Connected to database: " + dbPath);
that.database = mongoDatabase;
} else {
console.log("Could not connect to database, error returned: " + err);
}
});
}
DatabaseOperations.prototype.CreateNewCollection = function(collectionName){
this.database.createCollection(collectionName, function(err, collectionName){
if(!err) {
console.log("Successfully setup collection: " + collectionName.Username);
} else {
console.log("Could not setup collection, error returned: " + err);
}
});
}
这样,您将数据库分配给DatabaseOperations,DatabaseOperations的每个原型函数都可以通过this.database访问它。数据库现在是对象的属性。通常,不同的函数只能看到分配给'this'的东西(DatabaseOperations)。
答案 1 :(得分:0)
我最终使用mongoskin作为Mongo数据库的驱动程序。通过使用mongoskin我能够获得一个有效的mongodb对象来处理我的原型函数中的集合:http://www.hacksparrow.com/mongoskin-tutorial-with-examples.html