如何将mongoDB对象传递给Javascript / JS.Node中的所有原型函数?

时间:2015-06-22 00:55:50

标签: javascript node.js mongodb function-prototypes

我将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

如何将数据库对象放入每个原型函数中以使用它?

2 个答案:

答案 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