繁体   English   中英

调用退出错误后,具有回调功能的节点Cron变得无法入队握手

[英]node Cron with callback getting Cannot enqueue Handshake after invoking quit error

我正在尝试以特定间隔查询数据库。 所以我正在使用节点玉米。 我每分钟创建一个连接,并在查询完成后关闭它。 但是它仅在第一分钟有效,第二分钟在调用quit之后会引发无法将握手入队的错误,即使我正在使用回调也是如此。 有人纠正我做错了

app.js

var sController = require('./sController');
 cron.schedule('* * * * *',function(){
  console.log("I am running every minute");
  var params ="dddd";
  sController.updateDb(params,function(err,res){
  console.log("xxxx");
 });

});

sController.js

var sModel = require('./smodel');
var sController = function(){}

sController.prototype.updateDb = function(params,callback){
    sModel.updateDb(params,function(res,err){
        if(res){
            console.log("kkk");
        }
        callback(err,res);
    });
}
module.exports = new sController();

smodel.js

var connection = mysql.createConnection(mysqlConfig);
function mysqlConnect() {
    connection.connect();
}
function mysqlClose() {
    if(!connection._protocol._ended){
        connection.end();
    }
}
var sModel = function() {};

sModel.prototype.updateDb = function(params,callback){
    updateDb(params, function(err, res) {
        callback(err,res);
    });
};
function updateDb(params,callback){
    var query = 'SELECT * from tablename';
    mysqlConnect();
    connection.query(query,function(err,rows,fields){
        if(!err){
            console.log(rows.length);
        }
         callback(err,rows);
    });
    mysqlClose();
}

module.exports = new sModel();

简短答案

您应该使用mysql连接池。 查看官方文档https://github.com/mysqljs/mysql#pooling-connections

长答案

服务器需要足够的时间和资源来建立连接。 池保存连接实例并重用。 查看信息https://en.wikipedia.org/wiki/Connection_pool

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM