我将 NodeJS 与 MongoDB 一起使用,并且在将 mongoDB 对象传递给我的所有原型(prototype)函数时遇到一些问题。我不明白如何在这些原型(prototype)之间传递这个对象。也许有人可以指出我正确的方向?
在我的主文件中,我创建了 mongoDB 对象的一个新实例,其中包含我想要用于处理 mongoDB 的所有原型(prototype)。然后我使用原型(prototype)函数来连接并创建一个新集合。
Main.js
var mongo = require('./database/mongoDB')
var mongoDB = new mongo();
// Connect to database
mongoDB.ConnectDB(dbPath);
// Create a collection
mongoDB.CreateNewCollection("Usernames");
原型(prototype)函数在 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);
}
});
}
我能够连接到数据库,但从那时起,我不知道如何将数据库对象传递给其他原型(prototype)函数以创建集合或用它做任何其他事情。运行时收到的错误消息是这样的:
mongoDB.database.createCollection(collectionName, function(err, collection
TypeError: Cannot read property 'createCollection' of undefined
如何将数据库对象放入每个原型(prototype)函数中以供使用?
最佳答案
我看到您找到了替代解决方案,但我还是要发表评论。在构造函数中你应该做类似的事情
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 的每个原型(prototype)函数都可以通过 this.database 访问它。数据库现在是对象的属性。一般来说,不同的函数只能看到分配给“this”的内容(DatabaseOperations)。
关于javascript - 如何将 mongoDB 对象传递给 Javascript/JS.Node 中的所有原型(prototype)函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30970835/