2012-10-23 116 views
0

我正在嘗試迭代MongoDB遊標對象,並從集合中返回所有記錄,然後在節點outout中將響應方法用於瀏覽器。Node.JS HTTP響應返回什麼?

我的問題是沒有迴應似乎被解僱。

我已經嘗試把response.end()放入循環中,但它不會遍歷結果。

我在不同的地方也嘗試過response.end()。下面是代碼

db.open(function(err, db) { 
      if(!err) { 
       console.log("Nodelistr is connected to MongoDB\n"); 
       response.writeHead(200); 

       db.collection('todo', function(err, collection){    
        collection.find(function(err, cursor) { 
         cursor.each(function(err, doc) { 
          for(docs in doc){ 
           if(docs == "_id"){ 
           }else{ 
            var test = docs + " : " + doc[docs]; 
           } 
          } 
          data = data.toString("utf8").replace("{{TEST}}", test); 
          response.write(data); 

          //console.dir(doc); 
         })   
         response.end();   
        }); 
       }); 

      }; 

     }); 
+0

'data'未在初始化代碼片斷您發佈 – soulcheck

+0

更新的代碼片段。 –

+1

仍未初始化 – soulcheck

回答

0

我無法弄清楚你想要什麼與未初始化的變量data做和文件,你在它們之間迭代,但總的問題是,你需要等待調用response.end();,直到您點擊光標的末尾。這表示doccursor.each回調中爲空。

代碼的中間部分應遵循此一般方法:

db.collection('todo', function(err, collection){    
    collection.find(function(err, cursor) { 
     cursor.each(function(err, doc) { 
      if (doc) { 
       ... // initialize data from doc 
       response.write(data); 
      } else { 
       // doc is null, so the cursor is exhausted 
       response.end();   
      } 
     })   
    }); 
});