执行查询超过6次后,Node.js停止侦听(卡住)

时间:2018-03-09 17:17:57

标签: node.js express reload nodemon

我正在使用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和reload包。

1 个答案:

答案 0 :(得分:0)

您的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()完成后实际响应,您可以让DeleteRow()通过将res传递给它并让其发送回复来发送正确的回复。

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
     });
}