node.js/node_mysql-过时连接获取;“未选择任何数据库”;错误

node.js/node_mysql-过时连接获取;“未选择任何数据库”;错误,mysql,node.js,Mysql,Node.js,我们有一个node.js应用程序,它使用一个非常棒的库来访问MySQL数据库 不幸的是,如果我们的连接在8-10小时内没有使用,那么下次我们尝试运行查询时,服务器会返回一个“未选择任何数据库”错误。我们需要在某处添加一个“USE db”,但我不知道在哪里 现在,对我来说,连接会过时是有道理的,看起来node_mysql正在刷新那些过时的连接,但是似乎没有办法确保连接了正确的数据库。我正在寻找一个.connected()回调或事件,或者一些可以让我确保正确的数据库总是使用的东西,但到目前为止运气不

我们有一个node.js应用程序,它使用一个非常棒的库来访问MySQL数据库

不幸的是,如果我们的连接在8-10小时内没有使用,那么下次我们尝试运行查询时,服务器会返回一个
“未选择任何数据库”
错误。我们需要在某处添加一个
“USE db”
,但我不知道在哪里

现在,对我来说,连接会过时是有道理的,看起来node_mysql正在刷新那些过时的连接,但是似乎没有办法确保连接了正确的数据库。我正在寻找一个
.connected()
回调或事件,或者一些可以让我确保正确的数据库总是
使用的东西,但到目前为止运气不好


有什么建议吗?

Ys,客户端尝试重新连接。您可以尝试使用以下代码在重新连接时查询“use db”:

client._connection.on('connect', function() { client.query('use db'); })
这是节点mysql中发生重新连接的地方('end'处理程序):


由于节点mysql更新,以下代码可能有效:

client._socket.on('connect', function() {
    console.log("use ",DB_NAME);
    client.query('use '+DB_NAME);
});
使用时,您可能希望使用此代码执行相同的操作:

dbConn.pool.on('connection', function() {
    dbConn.pool.query("USE myDBname");
} );

这个答案有效。另一个答案是完全避免这个问题,只需在客户机对象上设置数据库,这样当它重新连接时,它就会为您执行
useDatabase
:p更改驱动程序:)Mysql身份验证握手允许包含数据库。其他一些驱动程序(包括my-)在握手时使用数据库(如果存在)。目前,我的驱动程序没有尝试重新连接丢失的连接,但我计划实现它。还要注意,我的解决方案有一个问题:self.\u prequeue(connect);在命令队列前面插入auth命令,查询('use db')将添加到队列末尾。其他排队的推荐可能会失败。“更改驱动程序”建议是“在节点mysql中使用db实现身份验证并将修补程序发送到@felixge”,而不是“使用其他驱动程序”,因为节点mysql包更新(当前为2.5),正确的事件名称不是“连接”,而是“连接”
dbConn.pool.on('connection', function() {
    dbConn.pool.query("USE myDBname");
} );