首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >node.js / node_mysql -过时的连接得到“没有数据库选择”错误

node.js / node_mysql -过时的连接得到“没有数据库选择”错误
EN

Stack Overflow用户
提问于 2011-06-29 03:35:54
回答 3查看 4.2K关注 0票数 3

我们有一个node.js应用程序,它使用马赛尔,这是一个很好的访问MySQL数据库的小型库。

不幸的是,如果我们的连接可能有8-10个小时没有使用,那么下一次尝试运行查询时,我们会从服务器得到一个"No database selected"错误。我们需要在某个地方添加一个"USE db",但我不知道在哪里。

现在,对我来说,连接将失效是有意义的,似乎node_mysql正在刷新那些陈旧的连接,但是似乎没有一种方法来确保正确的db连接。我正在寻找一个.connected()回调或事件,或者其他什么东西,这样我就可以确保正确的DB总是USEd,但到目前为止还没有什么好运气。

有什么建议怎么做吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-06-29 05:22:14

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

代码语言:javascript
复制
client._connection.on('connect', function() { client.query('use db'); })

这是在节点-mysql ('end‘处理程序):https://github.com/felixge/node-mysql/blob/master/lib/mysql/client.js中重新连接的地方。

代码语言:javascript
复制
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);
票数 5
EN

Stack Overflow用户

发布于 2012-03-09 08:47:18

由于节点-mysql更新,下面的代码可能会工作:

代码语言:javascript
复制
client._socket.on('connect', function() {
    console.log("use ",DB_NAME);
    client.query('use '+DB_NAME);
});
票数 0
EN

Stack Overflow用户

发布于 2014-05-04 18:52:22

在使用套餐时,您可能希望使用此代码执行相同的操作:

代码语言:javascript
复制
dbConn.pool.on('connection', function() {
    dbConn.pool.query("USE myDBname");
} );
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6515487

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档