TypeError.无法读取未定义的'collection'属性。不能读取未定义的 "集合 "属性。

问题描述 投票:0回答:1

我是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)

谁能告诉我,这里有什么问题,正确的方法是什么?

node.js mongodb node-mongodb-native
1个回答
0
投票

这是因为 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));
           }
        };
    }
});
© www.soinside.com 2019 - 2024. All rights reserved.