2016-09-23 155 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。再一次,只叫摧毀或結束對我沒有幫助。