2016-09-23 177 views
0

这真的很烦人我只是无法关闭我的mysql连接。这里是我的代码:无法关闭与NodeJS的mysql连接

var mysql = require('mysql'); 

function getConnection(){ 
    return mysql.createConnection({ 
     host  : credentials.db.host, //'eu-cdbr-azure-north-e.cloudapp.net', 
     user  : credentials.db.user,  //'b1a8cac71bbac61', 
     password : credentials.db.password,  //'be2de8334', 
     database : credentials.db.database  //'bcd290081' 
    }); 
} 

function runMySQLQuery(qry, callback){ 
    var conn = getConnection(); 
    conn.connect(); 
    conn.query(qry, function(err, rows, fields) { 
     if (err){ 
      // db err 
      callback(Error.sql_query, null); 
     } else{ 
      // check result 
      if(typeof rows == 'object'){ 
       callback(Error.no_errors, rows); 
      }else{ 
       // wrong return from db 
       callback(Error.sql_query, null); 
      } 
     } 

    }); 
    //conn.destroy(); 
    conn.end(function(err) { 
     // The connection is terminated now 
     console.log('connection ended'); 
    }); 
} 

var qry = "SELECT id, hash, last_login FROM acsm_b962fe317b5d30e.orium_chatbot_customers " + 
      "WHERE username = '" + username + "' AND password = '" + password + "';" 
//console.log('qry', qry); 
runMySQLQuery(qry, callback); 

所以,我收到我想要的数据,但连接保持打开,我想无论是毁灭和最终方法(有和没有一个回调函数)和我的程序只是做没有结束。它最终需要一分钟左右的时间,然后它会调用结束的回调函数。

真的很烦人,我也看到另一个stackoverflow doubt关于这方面也没有太大的成功。

对我来说关闭连接非常重要,因为我想在AWS Lambda上部署我的代码,而且我承担不起这么长时间。

+0

什么时候你想关闭它? – Beginner

+0

我的查询执行后,你会看到我调用callback,然后conn.end – Ernanirst

+0

尝试connection.on('error',function(error){console.log(error);}); – Beginner

回答

1

使用此代码MySQL连接释放

1) conn.release(); 

2) conn.destroy(); 
+0

嘿男人,不幸的是,这并没有工作,释放它不是一种可用的方法,因为它不是一个池,我试图破坏之前,它仍然不会关闭连接:( – Ernanirst

0

我最终找到我自己的解决方案。这真是一个糟糕的猜测,但它的工作。我不知道,如果节点MySQL是应该这样的工作,但我只需要添加一些代码的功能runMySQLQuery:

function runMySQLQuery(qry, callback){ 
    var conn = getConnection(); 
    conn.connect(); 
    conn.query(qry, function(err, rows, fields) { 
     if (err) { 
      return conn.rollback(function() { 
       console.log(JSON.stringify(err)); 
       throw Error.sql_query; 
      }); 
     } 
     conn.commit(function(err) { 
      if (err) { 
       return conn.rollback(function() { 
        throw Error.sql_commit; 
       }); 
      } 
      conn.destroy(); 
      callback(Error.no_errors, rows); 
     }); 
    }); 
} 

原来,打电话居然犯下结束连接后调用destroy。再一次,只叫摧毁或结束对我没有帮助。