执行查询超过6次后,Node.js停止监听(卡住) [英] Node.js stops listening (gets stuck) after executing query more than 6 times

查看:0
本文介绍了执行查询超过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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆