Mongodb(mongolab)Node.js在集合上找不到任何内容

时间:2012-12-31 21:23:40

标签: node.js mongodb mlab

我是一个很大的Node.js和Mongo新手,所以请保持温和。

所以这是我的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();
});

通过大量使用调试器语句,我得出的结论是client.authenticate似乎没有运行。它看起来就像要执行那条线,但只是跳过它并直接进入db.close()。

但这只是我遇到的第一个问题。在某些时候,我能够连接到数据库并进行身份验证,但我的用户没有在find({})命令中检索任何内容。我尝试了各种各样的方法,溪流是我最近的尝试,然后决定现在放弃它。

Mongolab似乎在v2.0.7上,我的mongo安装是v2.2.1。当我使用命令行工具以mongolabUser身份登录并执行db.myCollection.find()之类的命令时,我会收集我的集合中的所有内容,因此它不会成为权限问题。

有任何意见/建议吗?

1 个答案:

答案 0 :(得分:2)

client.authenticate()是异步的,因此调用它的行启动身份验证,但不会等待服务器响应,然后继续执行下一行{{1 }}。因此,当服务器响应时,客户端已关闭连接。

db.close()的事件处理程序中移动db.close()是否有帮助?

stream.end