我们有一个使用node_msyql的 node.js 应用程序,这是一个很棒的小库,用于访问MySQL数据库。
不幸的是,如果我们的连接未使用8到10个小时,那么下次我们尝试运行查询时,会从服务器返回"No database selected"
错误。我们需要在某处添加"USE db"
,但我无法弄清楚在哪里。
现在,我认为连接会变得陈旧,似乎node_mysql正在刷新那些陈旧的连接,但似乎没有办法确保正确的数据库连接。我正在寻找一个.connected()
回调或事件,或者让我确保正确的数据库始终是USE
'的东西,但到目前为止还没有运气。
有任何建议怎么做?
答案 0 :(得分:5)
是的,客户端尝试重新连接。您可以尝试使用以下代码在重新连接时查询“use db”:
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);
答案 1 :(得分:0)
因为node-mysql更新以下代码可能有效:
client._socket.on('connect', function() {
console.log("use ",DB_NAME);
client.query('use '+DB_NAME);
});
答案 2 :(得分:0)
使用the node-mysql-promise package时,您可能希望使用此代码执行相同的操作:
dbConn.pool.on('connection', function() {
dbConn.pool.query("USE myDBname");
} );