2012-12-31 5 views
3

Je suis un grand Node.js et Mongo newbie, alors s'il vous plaît soyez doux.Mongodb (mongolab) Node.js ne trouve rien sur une collection

Alors, voici mon application Node.js:

var mongo = require('mongodb'); 
var Server = mongo.Server; 
var Db = mongo.Db; 

var server = new Server('hostname.mongolab.com', 666, {auto_reconnect : true}, {w:0, native_parser: false}); 
var db = new Db('dbName', server, {safe:true}); 

db.open(function(err, client) { 
    if(err) { return console.dir(err); } 
    client.authenticate('mongolabUser', 'mongolabUserPassword', function(authErr, success) { 
    if(authErr) { return console.dir(authErr); } 
    var stream = client.collection('myCollection').find({}).stream(); 
    stream.on('data', function(item) {console.log("Do something with item"); }); 
    stream.on('end', function() {console.log("Empty!");}); 
    }); 
    db.close(); 
}); 

Grâce à l'utilisation prodigieuse des déclarations de débogueur, je suis venu à la conclusion que le client.authenticate ne semble pas fonctionner. On dirait qu'il est sur le point d'exécuter cette ligne, mais il saute juste dessus et va directement à db.close().

Mais ce n'est que le premier de mes problèmes. À un moment donné, j'étais capable de me connecter à la base de données et de m'authentifier, mais mon utilisateur ne récupérait rien dans la commande find ({}). J'ai essayé toutes sortes de façons, et les flux sont ma dernière tentative avant de décider d'abandonner pour le moment. Mongolab semble être sur la version 2.0.7, mon installation de mongo est v2.2.1. Lorsque j'utilise l'outil de ligne de commande pour me connecter en tant que mongolabUser et exécuter une commande comme db.myCollection.find(), j'obtiens tout dans ma collection, donc cela ne peut pas poser de problème avec les permissions.

Des conseils ou des suggestions?

Répondre

2

client.authenticate() est asynchrone, la ligne qui appelle commence l'authentification, mais ne pas attendre pour répondre au serveur avant de passer à l'exécution de la ligne suivante, db.close(). Ainsi, au moment où le serveur répond, la connexion a été fermée par le client.

Est-ce que le déplacement de la db.close() à l'intérieur du gestionnaire d'événements pour stream.end aide?

var mongo = require('mongodb'); 
var Server = mongo.Server; 
var Db = mongo.Db; 

var server = new Server('hostname.mongolab.com', 666, {auto_reconnect : true}, {w:0, native_parser: false}); 
var db = new Db('dbName', server, {safe:true}); 

db.open(function(err, client) { 
    if(err) { return console.dir(err); } 
    client.authenticate('mongolabUser', 'mongolabUserPassword', function(authErr, success) { 
    if(authErr) { return console.dir(authErr); } 
    var stream = client.collection('myCollection').find({}).stream(); 
    stream.on('data', function(item) {console.log("Do something with item"); }); 
    stream.on('end', function() { 
     console.log("Empty!"); 
     db.close(); 
    }); 
    }); 
}); 
+0

Des conneries saintes. ** Facepalm ** – MikeMac

Questions connexes