2016-01-15 88 views
0

所以我使用Mongoose的findOneAndUpdate來更新文檔中的鍵值。我需要將該數字加1。如果它不在那裏,它應該創建一個新文檔。它在Node中的後路由中。MongoDB:等待可用套接字掛起

我有信息去點擊按鈕後的路線。我的應用程序要求用戶連續多次單擊按鈕,並在瀏覽器底部獲得Waiting for available sockets...,並且所有內容都會掛起。

我只是在我的本地主機上執行此操作。在曾經的一切「unhangs」的要求,我得到以下錯誤在我的控制檯的末尾: POST http://localhost:3000/api/songsqueued net::ERR_EMPTY_RESPONSE

這是佈線後我的工作:

router.post('/api/songsqueued', function(req, res){ 
    Song.findOneAndUpdate({songId: req.body.songId}, { $inc:{queueTimes: 1} }, 
     function(err, song){ 
     if (err) { 
      return console.log("Error: " + err) 
     } 
     if(song){ 
      song.queueTimes += 1; 

      song.save(function(err){ 
       if(err){ 
        console.log(err) 
       } else { 
        console.log("updated fam") 
       } 
      }); 
     } else { 

      var song = new Song(); 

      song.artistName = req.body.artistName; 
      song.titleName = req.body.titleName; 
      song.songId = req.body.songId; 
      song.songImg = req.body.songImg; 


      song.save(function(err) { 
       if (err) { 
       console.log("Error: " + err) 
       } else { 
       console.log("created fam") 
       } 
      }) 

      console.log(song); 
      return res.json({message: "SongCreated"}) 
     } 

    }) 
}) 

如何彌補任何想法這個?

+0

您能向我們展示查詢以及設置響應的位置嗎? –

+0

@ExplosionPills我編輯它以顯示我製作的POST路線 –

+0

您只在創建新歌曲時設置響應;如果某首歌曲出現錯誤或更新,您不會發送回復 - 這是導致它掛起的原因 –

回答

1

您的節點服務器需要向客戶端發送響應以完成響應。如果你沒有發送響應,連接將會超時,你會得到套接字掛斷。確保您發送每個條件的響應:

if (err) { 
    return res.status(500).end("some error message"); 
} 
else if (song) { 
    return res.status(200).end("updated"); 
} 
else { 
    return res.status(201).end("created"); 
}