node.js / node_mysql - 陈旧连接获取“NO database selected”错误

时间:2011-06-29 03:35:55

标签: mysql node.js

我们有一个使用node_msyql node.js 应用程序,这是一个很棒的小库,用于访问MySQL数据库。

不幸的是,如果我们的连接未使用8到10个小时,那么下次我们尝试运行查询时,会从服务器返回"No database selected"错误。我们需要在某处添加"USE db",但我无法弄清楚在哪里。

现在,我认为连接会变得陈旧,似乎node_mysql正在刷新那些陈旧的连接,但似乎没有办法确保正确的数据库连接。我正在寻找一个.connected()回调或事件,或者让我确保正确的数据库始终是USE'的东西,但到目前为止还没有运气。

有任何建议怎么做?

3 个答案:

答案 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");
} );