我是一个大的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({})命令中没有检索任何内容。我尝试了各种方法,在决定暂时放弃之前,streams是我的最新尝试。
Mongolab似乎在v2.0.7上,我的Mongo安装是v2.2.1。当我使用命令行工具以蒙古人身份登录并执行诸如db.my collection.find()之类的命令时,我会获取集合中的所有内容,因此权限不会有问题。
有什么建议吗?
最佳答案
client.authenticate()
是异步的,因此调用它的行将启动身份验证,但在继续执行下一行之前不会等待服务器响应。所以当服务器响应时,客户端已经关闭了连接。
在db.close()
的事件处理程序中移动db.close()
是否有帮助?
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();
});
});
});