Node.js 从节点服务器到mysql数据库的多重连接,如何修复
使用以下代码,我通常在节点服务器启动后执行第一个查询。第二个查询将抛出以下错误: 错误:在已将握手排队后,无法将握手排队 我理解错误的含义,我知道我必须修复与MySql并行的并发连接。我不明白的是我必须如何重写代码,因为我还在学习nodeNode.js 从节点服务器到mysql数据库的多重连接,如何修复,node.js,node-mysql,Node.js,Node Mysql,使用以下代码,我通常在节点服务器启动后执行第一个查询。第二个查询将抛出以下错误: 错误:在已将握手排队后,无法将握手排队 我理解错误的含义,我知道我必须修复与MySql并行的并发连接。我不明白的是我必须如何重写代码,因为我还在学习node 我还读到,建立连接池可以解决问题(可能是因为如果我为同一查询打开两个连接,它不会抱怨),但在修复错误时实现它有用吗?很难说,因为代码不是完整的控制器,但是看起来con是全局的,每次有传入请求时,您都运行con.connect()。您应该只使用一次con.con
我还读到,建立连接池可以解决问题(可能是因为如果我为同一查询打开两个连接,它不会抱怨),但在修复错误时实现它有用吗?很难说,因为代码不是完整的控制器,但是看起来
con
是全局的,每次有传入请求时,您都运行con.connect()
。您应该只使用一次con.connect()
。因此,第一次有效,第二次给你“已经握手”的错误
尝试更改为连接池,这样就更容易发现您在何处保留连接以及在何处将其释放回连接池。请注意SQL注入漏洞。始终使用参数化查询。@Alejandro是的,谢谢。这是该问题的简化代码。生产环境中都有参数化查询。请使用con.connect一次,并在需要进行查询时传递连接。这样,您只能创建一次连接。在您的代码片段中,您每次都会创建一个连接。@Rajikimal是的,我知道这就是我在问题中所写的问题。我的问题是如何做到这一点。:-)对Con在全球范围内定义,并在世界各地的不同地方使用。如何重写查询部分以避免再次调用con?那是我的question@LelioFaieta也许将实现更改为使用连接池,如果仍然不起作用,请与我们联系。您的答案是,在我已经提出的问题中,没有添加任何字节的信息。
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");
});
});