我正在尝试以特定间隔查询数据库。所以我用的是 Node Jade 米。我每分钟创建一个连接,并在查询完成后关闭它。但它只在第一分钟有效,下一分钟它会在调用退出后抛出 Cannot enqueue Handshake 的错误,即使我正在使用回调。有人纠正我做错的事情
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
关于javascript - 带有回调的 Node Cron 在调用退出后出现 Cannot enqueue Handshake 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45837944/