问题描述
var MysqL = require('MysqL');
var con = MysqL.createConnection({
host: "localhost",user: "***",password: "***",database: "***"
});
case 'customer.updated':
//il cliente ha aggiornato indirizzo mail nel portale e io devo fare lo stesso
con.connect(function(err) {
if (err) throw err;
console.log("Connected!");
var sql = "UPDATE utenze SET email='"+data.object.email+"' WHERE stripe_customer='"+data.object.id+"'";
con.query(sql,function (err,result) {
if (err) throw err;
console.log("Customer record updated");
});
});
使用以下代码,我通常在节点服务器启动后执行第一个查询。第二个查询将引发以下错误:
错误:已将握手加入队列后,无法将其加入队列。
我了解错误的含义,并且我必须修复与MysqL并行执行的并发连接。我不了解的是,由于我仍在学习node,所以我必须重写代码。
我还读到建立连接池可以解决此问题(可能是因为如果我为同一查询打开两个连接,它不会抱怨),但是在修复错误时实现它有用吗?
解决方法
很难说,因为代码不是完整的控制器,但是看起来con
是全局的,并且每次有传入请求时您都在运行con.connect()
。您只能con.connect()
一次。因此,第一次工作,第二次给您“已经握手”错误。
尝试更改为连接池,这样会更容易发现保留连接的位置以及将其释放回连接池的位置。