2015-09-15 69 views
0

对我的MongoDB DB执行查找查询似乎会重置连接并使节点服务器崩溃。MongoDB查询将套接字连接重置为Node.js服务器

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

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事件,“连接到DB”字符串印刷在控制台和Firefox的控制台信号到插座的新连接被estabilished;我的客户端脚本连接到document.load一次。

之后是节点控制台输出;你可以看到查询被执行;看着'原始'输出似乎失败了尝试。 err为空,没有别的输出。

望着关于“最长呼叫栈”其他的答案超出现在看来,这是一个递归函数通常引起的,但这里的情况并非如此。

http://pastebin.com/0xv1qcHn

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

一个非常类似的功能工作正常,并返回整个DB的语法似乎是正确的,感觉我失去了一些东西很明显...

回答

1
  1. 不知道你是否应该可以使用空,但我认为一个空的对象应该工作
  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'); 
    
        } 
    });