nodejs - mongodb - Невозможно вызвать метод 'collection' из null - PullRequest
4 голосов
/ 08 июня 2011

Я пытаюсь запрашивать базу данных каждый раз, когда пользователь вводит сообщения, nodejs жалуется на "Невозможно вызвать метод 'collection' null" Ниже приведен код, из-за которого, я думаю, возникла проблема.

var mongo = require('mongodb');

var db = new mongo.Db('chat', new mongo.Server('127.0.0.1', '27017', {native_parser:true}));
//testting querying mongo everytime there is message
socket.on('connection', function(client) {
    client.on('message', function(message) {        
        db.open(function(err, db){
            db.collection('sessions', function(err, collection){
                collection.count(function(err, count) {
                  sys.puts("There are " + count + " records.");
                });
            });
        });
    });
});

примечание: первое сообщение пользователя, я правильно подсчитал sys.puts, ошибок нет. но второй вход вызовет ошибку.

Ответы [ 2 ]

3 голосов
/ 08 июня 2011
db.open(function(err, db){
    if (err) {
        sys.puts(err);
    } else {
        db.collection('sessions', function(err, collection){
            collection.count(function(err, count) {
                sys.puts("There are " + count + " records.");
            });
        });
    }
});

Всегда проверяйте объект err и печатайте его.

2 голосов
/ 09 июня 2011
db.open(function(err, db){
    socket.on('connection', function(client) {
        });
    });
});

Как Рэйнос предложил поместить db.open во внешнюю часть замыкания, это решит проблему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...