无法关闭与NodeJS

时间:2016-09-23 01:25:17

标签: mysql node.js node-mysql

这真烦人我只是无法关闭我的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);

所以,我收到了我想要的数据,但连接保持打开,我尝试了destroy和end方法(有和没有回调函数),我的程序就没有结束。它最终结束需要大约一分钟,然后它调用结束的回调函数。

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

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

2 个答案:

答案 0 :(得分:1)

  

将此代码用于mysql连接发布

1) conn.release();

2) conn.destroy();

答案 1 :(得分:0)

我最终找到了自己的解决方案。这真是一个糟糕的猜测,但它确实奏效了。我不确定node-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);
        });
    });
}

原来在调用commit之后调用destroy实际上结束了连接。再一次,只召唤毁灭或结束并没有让我失望。