2015-09-15 72 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'); 
    
        } 
    });