繁体   English   中英

node.js / node_mysql - 过时的连接出现“未选择数据库”错误

[英]node.js / node_mysql - stale connections get “NO database selected” error

我们有一个使用node_msyqlnode.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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM