MongoDB:等待可用的套接字挂起

时间:2016-01-15 23:53:16

标签: node.js mongodb sockets

所以我使用Mongoose的findOneAndUpdate来更新文档中的键值。我需要将这个数字增加一个。如果它不在那里它应该创建一个新文档。它位于Node的后期路线中。

点击按钮,我有信息进入邮政路线。我的应用程序要求用户连续多次单击一个按钮,我的浏览器底部会显示Waiting for available sockets...,所有内容都会挂起。

我只是在我的localhost上这样做。在请求结束时,一旦“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"}) 
        }

    })
})

有关如何解决此问题的任何想法?

1 个答案:

答案 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");
}