这真烦人我只是无法关闭我的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上部署我的代码,而且我不能承受这么长时间。
答案 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实际上结束了连接。再一次,只召唤毁灭或结束并没有让我失望。