所以我使用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"})
}
})
})
有关如何解决此问题的任何想法?
答案 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");
}