我们有一个node.js应用程序,它使用马赛尔,这是一个很好的访问MySQL数据库的小型库。
不幸的是,如果我们的连接可能有8-10个小时没有使用,那么下一次尝试运行查询时,我们会从服务器得到一个"No database selected"错误。我们需要在某个地方添加一个"USE db",但我不知道在哪里。
现在,对我来说,连接将失效是有意义的,似乎node_mysql正在刷新那些陈旧的连接,但是似乎没有一种方法来确保正确的db连接。我正在寻找一个.connected()回调或事件,或者其他什么东西,这样我就可以确保正确的DB总是USEd,但到目前为止还没有什么好运气。
有什么建议怎么做吗?
发布于 2011-06-29 05:22:14
客户试图重新连接。您可以尝试使用如下代码在重新连接时查询“use db”:
client._connection.on('connect', function() { client.query('use db'); })这是在节点-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);发布于 2012-03-09 08:47:18
由于节点-mysql更新,下面的代码可能会工作:
client._socket.on('connect', function() {
console.log("use ",DB_NAME);
client.query('use '+DB_NAME);
});发布于 2014-05-04 18:52:22
在使用套餐时,您可能希望使用此代码执行相同的操作:
dbConn.pool.on('connection', function() {
dbConn.pool.query("USE myDBname");
} );https://stackoverflow.com/questions/6515487
复制相似问题