MongoDB查询重置与Node.js服务器

时间:2015-09-15 21:05:43

标签: node.js mongodb socket.io

对我的MongoDB DB执行查找查询似乎重置连接并使节点服务器崩溃。

我的服务器处理这样的套接字事件:

io.sockets.on('connection', function(socket) {

MongoClient.connect(url, function(err, db) {
    if (err)
        console.log('Error');

    console.log('Connection established to', url);

    var collection = db.collection('spedizioni');

    socket.on('adminReq', function() {
        handlers.handleAdmin(collection, socket);
    });
});
});

handleAdmin函数是:

function handleAdmin(collection, socket) {
console.log('Admin event');
collection.find(null, function(err, raw) {
    console.log('Find function');
    console.log(raw);

    if (err){ 
        socket.emit('err');
        console.log('Error function');

    }
    if (raw) {
        socket.emit('adminRes', raw);
        console.log('Response function');

    } else {
        socket.emit('adminNull');
        console.log('Null function');

    }
});
}

我希望查询返回数据库中的所有项目;根据MongoDB手册,我通过执行不带参数的查找查询来实现。

我尝试省略null或使用{}作为第一个参数,但没有任何改变。

按下按钮生成adminReq事件后,控制台上会打印'Connection to DB'字符串,并且firefox控制台发出一个与socket连接的新连接已建立;我的客户端脚本在document.load连接一次。

之后是节点控制台输出;正如您所看到的那样执行查询;看着'原始'输出似乎失败了尝试。 err为null,没有其他输出。

看看关于'最大调用堆栈'的其他答案超出它似乎通常是由递归函数引起的,但在这里并非如此。

http://pastebin.com/0xv1qcHn

为什么这是输出而不是查询结果?为什么重置连接?

一个非常相似的函数工作正常,返回整个数据库的语法似乎是正确的,感觉我错过了一些非常明显的东西......

1 个答案:

答案 0 :(得分:1)

  1. 不确定是否应该使用null,但我认为空对象应该可以使用
  2. 您需要将结果转换为数组

    collection.find({}).toArray(function(err, raw) {
      console.log('Find function');
      console.log(raw);
    
      if (err){ 
        socket.emit('err');
        console.log('Error function');
    
      }
      if (raw) {
        socket.emit('adminRes', raw);
        console.log('Response function');
    
      } else {
        socket.emit('adminNull');
        console.log('Null function');
    
      }
    });