执行查询超过6次后,Node.js停止监听(卡住) [英] Node.js stops listening (gets stuck) after executing query more than 6 times
本文介绍了执行查询超过6次后,Node.js停止监听(卡住)的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我使用的是ExpressJs,这是我多次执行的查询
router.post('/Index_api/Reminder/Delete',function(req, res)
{
Reminder_Id = req.body;
DeleteRow('Reminders','Reminder_Id',Reminder_Id.Reminder_Id);
});
int这是DeleteRow函数
function DeleteRow(TableName,WCC, id)
{
var query ="Delete FROM `"+TableName + "` WHERE `"+ WCC +"` =" + id;
conn.query(query,function(err,result)
{
if(err)
{
console.error(err);
return;
}else{
console.log(result);
}
});
}
我将数据发布到此路线,如下所示:
function DeleteRow(id)
{
$.post('/Index_api/Reminder/Delete',{
Reminder_Id:id
});
$("#row"+id).remove();
}
如果我想一起删除6条记录,没有问题,但是到了第7天,一条记录没有被执行,并且被卡住了。 我也在使用nodemon和重新加载程序包。
推荐答案
您的router.post()
路由处理程序未返回任何响应。因此,浏览器仍在等待某种响应。浏览器与任何给定主机建立的连接数都是最大的,因此,一旦有太多连接都在那里等待响应,浏览器就会将下一个请求排队,直到前一个请求完成。
这些请求最终会超时,但这可能需要很长时间。
要进行修复,只需从您的路由处理程序发送响应:
router.post('/Index_api/Reminder/Delete',function(req, res) {
Reminder_Id = req.body;
DeleteRow('Reminders','Reminder_Id',Reminder_Id.Reminder_Id);
res.send("ok");
});
或者,如果您希望帖子在DeleteRow()
完成后实际响应,您可以通过将res
传递给res
并让它发送响应来让DeleteRow()
发送正确的响应。
router.post('/Index_api/Reminder/Delete',function(req, res) {
Reminder_Id = req.body;
DeleteRow('Reminders','Reminder_Id',Reminder_Id.Reminder_Id, res);
});
function DeleteRow(TableName, WCC, id, res) {
var query = "Delete FROM `" + TableName + "` WHERE `" + WCC + "` =" + id;
conn.query(query, function(err, result) {
if (err) {
console.error(err);
res.status(500).send("delete failed");
} else {
res.send("delete OK");
}
});
}
然后,您可能还应该更改您的客户端代码,以实际查看返回的状态并执行相应的操作。
function DeleteRow(id) {
$.post('/Index_api/Reminder/Delete',{
Reminder_Id:id
}).then(function(result) {
if (result.status == 200) {
// successful
$("#row"+id).remove();
} else {
// handle server error here
}
}, function(err) {
// network error here
});
}
这篇关于执行查询超过6次后,Node.js停止监听(卡住)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文