nodejs + mysql:如何在end()之后重新打开mysql?

时间:2014-08-01 03:01:18

标签: mysql node.js

代码如下:

var mysql      = require('mysql');
var connection = mysql.createConnection({
  host      : 'localhost',
  port      :"3306",
  database  :"mydb",
  user      : 'root',
  password  : '007007',
});
var isCon = true;
connection.connect(
    function  (err) {
        console.log(isCon);
        if (err) {
           isCon=false;
           console.error("error connecting :"+err);
           return;
       };
   }
   );
if(isCon){
    connection.query('select * from tb_items', function(err, result) {
        if (err) throw err;
        console.log('The solution is: ', result);
        console.log('The typeof solution is ',typeof(result));
        debugger;
    });
    connection.end();
}

connection.connect(
    function  (err) {
        console.log(isCon);
        if (err) {
           isCon=false;
           console.error("error connecting :"+err);
           return;
       };
   }
   );
if(isCon){
    connection.query('select * from tb_items', function(err, result) {
        if (err) throw err;
        console.log('The solution is: ', result);
        console.log('The typeof solution is ',typeof(result));
        debugger;
    });
    connection.end();
}

我只是打开() - > connect() - > query() - > end(),然后再次执行,但第二次,出现错误:错误:无法排队握手在调用quiting之后。 问题:也许我不能在结束后重新打开它。但是我只是想知道,如果我结束(),我怎么能重新打开它?

1 个答案:

答案 0 :(得分:0)

不,你不能,只是创造另一个。连接类中的所有状态仅与当前连接相关,因此可以使用“reopenWithSameConfig”方法,但是您应该从外部执行此操作。

此外,您无需关闭每个查询的连接 - 只需继续重复使用它,而无需调用.end()

如果您想要多个连接并自动处理死连接,则应使用Pool类。

还有一点需要注意:您的isCon检查不正确,connection.queryconnect()回调之前被调用,所以它始终为真。只检查query回调本身的错误是安全的。如果连接不成功,则会将错误传播到排队的命令