2017-04-12 80 views
0

自2天以來我面臨一個問題,我無法弄清楚如何解決它。我在forEach上有錯誤,所以我的應用程序運行良好,然後停止沒有任何說明。NodeJS - Events.js無法讀取屬性forEach undefined

以下是發生錯誤的代碼。

var easy = setInterval(function(){ 
     keywords.forEach(function(k) { 
      tweetModel.find({keyword: k}).sort({date: -1}).limit(20).exec(function(err, data) { 
       var score = []; 
       var date = []; 
       console.log(data); 
       console.log(err) 
       data.forEach(function (item) { 
        score.push(Math.floor(parseFloat(item.score) * 1000)/1000); 
        date.push(item.date.getDate()+'/'+parseInt(item.date.getMonth() + 1)+'/'+item.date.getFullYear()+':'+parseInt(item.date.getHours() + 1)+':'+item.date.getMinutes()); 

        tArrayStats[k] = score; 
        tArrayStats['date'] = date; 
       }); 

      }); 

     }); 

     io.sockets.emit('stats',tArrayStats); 
    },3000); 

錯誤在這裏拋出

data.forEach(function (item) 

,但我想不通爲什麼!感謝您的幫助。

由於要求有控制檯日誌數據的輸出:

enter image description here

EDITED工作代碼,這要歸功於@Ids範德Zee的

var easy = setInterval(function(){ 
    keywords.forEach(function(k) { 

     tweetModel.find({keyword: k}).sort({date: -1}).limit(20).exec(function(err, data) { 
      if (data && !err) 
      { 
       var score = []; 
       var date = []; 
       console.log(data); 
       console.log(err) 

       data.forEach(function (item) { 
        score.push(Math.floor(parseFloat(item.score) * 1000)/1000); 
        date.push(item.date.getDate()+'/'+parseInt(item.date.getMonth() + 1)+'/'+item.date.getFullYear()+':'+parseInt(item.date.getHours() + 1)+':'+item.date.getMinutes()); 

        tArrayStats[k] = score; 
        tArrayStats['date'] = date; 
       }); 
      } 

     }); 
    }); 

    io.sockets.emit('stats',tArrayStats); 
},3000); 
+1

兩條線',那是什麼,它的輸出? –

+0

更新我的帖子與輸出,然後當錯誤下降我得到了「undedifned」。我從twit回收數據 –

+0

你顯示的數據似乎是一個數組中的對象---> [{}] – codemax

回答

2

就行了:

tweetModel.find({keyword: k}).sort({date: -1}).limit(20).exec(function(err, data) { 

你正在嘗試查找與關鍵字k相對應的數據,您正在爲每個關鍵字執行此操作。如果tweetModel不包含您正在查找的關鍵字,那麼數據變量將是未定義的。您可以通過檢查數據是否未定義來解決此問題。相反,你有`的console.log(數據)部分之前

data.forEach(function (item){...

if(data){ 
     data.forEach(function (item){... 
+0

是的,我已經弄清楚了這樣的事情,我把整個事情放進了tweet.Model在if(data &&!err)中,它應該是好的!謝謝你的幫助 ! –

相關問題