0

我正在尝试通过 nodejs mnogdb-native 驱动程序从 mongodb 检索数据。mongodconsole 表示连接成功。不幸的是,在控制台检索收集和记录消息“在 findOne 之前”之后,什么也没发生。看起来该findOne方法永远不会返回。

var mongo = require('mongodb'),
    config = require('./config');

var UserProvider = function() {
    this.db = new mongo.Db('chatbox', 
        new mongo.Server(config.mongoServer, config.mongoPort, {auto_reconnect: true}), {});
    this.db.open(function() {});
};

UserProvider.prototype.getCollection = function(callback) {
    this.db.collection('users', function(error, collection) {
    if (error) {
        callback(error);
    }
    else {
        callback(null, collection);
    }
    });
};

UserProvider.prototype.validateUser = function(username, password, callback) {
    this.getCollection(function(error, collection) {
        if (error) {
            console.log('error');
            callback(error);
        }
        else {
            console.log('before findOne');
            collection.findOne({login: username, password: password}, function(error, item){
                console.log('done');
                if (error) {
                    callback(error);
                }
                else {
                    callback(null, item != null);
                }
            });
        }   
    });
};

module.exports = UserProvider;

谁能指出我可能的问题点?

4

2 回答 2

2

真的是在黑暗中戳 - 但尝试将 console.log 添加到db.open.

如果该行之前没有出现,'before findOne'那么问题很可能只是数据库连接未打开。

于 2012-04-05T07:08:45.480 回答
0

查看将使用您的代码的代码:

var myProvider = require('yourcode').UserProvider;

myProvider.validateUser('me','pwd', function(error, success) {
  console.log("Success: " + success);
});

当我到达 时myProvider.validateUser,我能保证它this.db.open()已经返回吗?通常,这整个事情是连续的。但是在 Node.JS 中,这db.open()不是阻塞的。所以调用到数据库然后代码继续运行,所以你实际上有一个竞争条件。

于 2012-04-05T09:18:42.583 回答