[英]node.js / node_mysql - stale connections get “NO database selected” error
我们有一个使用node_msyql的node.js应用程序,这是一个用于访问 MySQL 数据库的很棒的小库。
不幸的是,如果我们的连接可能有 8 到 10 个小时未使用,那么下次我们尝试运行查询时,我们会从服务器返回"No database selected"
错误。 我们需要在某处添加一个"USE db"
,但我不知道在哪里。
现在,对我来说,连接将 go 陈旧是有道理的,并且似乎 node_mysql 正在刷新那些陈旧的连接,但似乎没有办法确保连接了正确的数据库。 我正在寻找一个.connected()
回调或事件,或者可以让我确保正确的数据库始终是USE
的东西,但到目前为止还没有运气。
任何建议如何做到这一点?
是的,客户端尝试重新连接。 您可以尝试使用如下代码在重新连接时查询“使用数据库”:
client._connection.on('connect', function() { client.query('use db'); })
这是在 node-mysql('end' 处理程序)中发生重新连接的地方: https://github.com/felixge/node-mysql/blob/master/lib/mysql/client.js
var connection = self._connection = new Stream(),
parser = self._parser = new Parser();
connection
.on('error', function(err) {
var connectionError = err.code && err.code.match(/ECONNREFUSED|ENOTFOUND/);
if (connectionError) {
if (cb) {
cb(err);
return;
}
}
self.emit('error', err);
})
.on('data', function(b) {
parser.write(b);
})
.on('end', function() {
if (self.ending) {
self.connected = false;
self.ending = false;
return;
}
if (!self.connected) {
return;
}
self.connected = false;
self._prequeue(connect);
});
connection.connect(self.port, self.host);
使用node-mysql-promise package时,您可能希望使用此代码执行相同操作:
dbConn.pool.on('connection', function() {
dbConn.pool.query("USE myDBname");
} );
由于 node-mysql 更新以下代码可能有效:
client._socket.on('connect', function() {
console.log("use ",DB_NAME);
client.query('use '+DB_NAME);
});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.