从一个节点服务器多次连接到mysql数据库,如何修复


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()一次。因此,第一次有效,第二次给你";已经握手";错误

尝试更改为连接池,这样可以更容易地发现您在哪里保留连接以及在哪里将其释放回池。

最新更新