【问题标题】:MongoDB query resets socket connection to Node.js serverMongoDB 查询重置与 Node.js 服务器的套接字连接
【发布时间】:2015-09-15 21:05:42
【问题描述】:

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

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

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 控制台会发出与套接字的新连接已建立的信号;我的客户端脚本在 document.load 处连接一次。

下面是之后的节点控制台输出;如您所见,查询已执行;查看“原始”输出,似乎进行了失败的尝试。 err 为空,没有其他输出。

查看有关“最大调用堆栈”超出的其他答案,它似乎通常是由递归函数引起的,但这里不是这种情况。

http://pastebin.com/0xv1qcHn

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

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

【问题讨论】:

    标签: node.js mongodb socket.io


    【解决方案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');
      
        }
      });
      

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-04-27
      • 2014-05-08
      • 1970-01-01
      • 1970-01-01
      • 2021-02-18
      • 2015-09-29
      • 1970-01-01
      • 2016-12-09
      相关资源
      最近更新 更多