我是nodejs的新手,目前正在使用node.js和mongodb.这是我的mongodb连接代码。
var mongodb = require("mongodb");
var MongoClient = mongodb.MongoClient;
var url = 'mongodb://localhost:27017/mydb';
var mongodbStore = {};
var db;
MongoClient.connect(url, function (err, dataBase) {
if (err) {
console.log('Unable to connect to the mongoDB server. Error:', err);
} else {
debug("Connected to mongodb. Initialising saved listeners...");
db = dataBase;
var manager = require('./managers/manager');
}
});
mongodbStore.add = function(name, data) {
var collection = db.collection('listeners');
if (collection) {
collection.insert("listener", JSON.stringify(data));
}
};
我将从我的另一个文件中调用 "add "函数,但现在我在add函数的第一行出现错误。
var collection = db.collection('listeners');
错误是。
TypeError: Cannot read property 'collection' of undefined
at Object.mongodbStore.add (C:\Node.js Listeners 2\mongodbStore.js:54:21)
at C:\Node.js Listeners 2\managers\manager.js:46:18
at Server.<anonymous> (C:\Node.js Listeners 2\managers\tcpManager.js:54:10)
at Server.emit (events.js:104:17)
at net.js:1171:12
at process._tickCallback (node.js:355:11)
谁能告诉我,这里有什么问题,正确的方法是什么?
这是因为 db
将是未定义的,因为你是从一个回调中分配它的值。你需要将你的代码移到传递给 connect
像这样。
var mongodb = require("mongodb");
var MongoClient = mongodb.MongoClient;
var url = 'mongodb://localhost:27017/mydb';
var mongodbStore = {};
MongoClient.connect(url, function (err, db) {
if (err) {
console.log('Unable to connect to the mongoDB server. Error:', err);
} else {
debug("Connected to mongodb. Initialising saved listeners...");
var manager = require('./managers/manager');
mongodbStore.add = function(name, data) {
var collection = db.collection('listeners');
if (collection) {
collection.insert("listener", JSON.stringify(data));
}
};
}
});