2016-01-15 87 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"); 
}