应用程序不会终止于MySQL池
我正在编写一个nodejs应用程序,并希望使用连接池。
但是,下面的应用程序不会终止 – 虽然我希望它在connection.end()
调用后终止。
应用程序工作得很好,如果我使用一个连接,而不是池。 我需要以某种方式终止游泳池吗?
使用的库 : https : //github.com/felixge/node-mysql
Ubuntu上的node.js版本 :0.10.4
var mysql = require('mysql'); var pool = mysql.createPool({ host : 'example.org', user : 'myuser', password : 'youbet', database : 'notrevealingdetails', insecureAuth: true }); function getCampaignData(callback) { pool.getConnection(function(err, connection) { if(err) throw err; connection.query( 'SELECT cam.id, cam.name AS campaign_name, cam.subdomain, usr.email, usr.display_name AS user_displayname ' + 'FROM campaigns AS cam INNER JOIN users AS usr ON usr.id = cam.user_id ' + 'WHERE cam.state=2', function(err, rows) { callback(err, rows,connection); //console.log('called end()'); }); // callback function for connection.query }); // end pool.GetConnection } getCampaignData(function(err, rows, connection) { if (err) throw err; connection.end(); console.log("I expect my app to terminate"); });
我有同样的问题,但看看源代码https://github.com/felixge/node-mysql/blob/master/lib/Pool.js我发现,至less在目前的实施,有一个end()方法,在所有连接上调用end()。
它也接受一个callback函数,在所有连接实际结束之后(或者每当发生错误时)被调用。
pool.end(function (err) { if (err) console.error("An error occurred: " + err); else console.log("My app terminated"); });
我会用
getCampaignData(function(err, rows, connection) { if (err) throw err; connection.release(); console.log("I expect my app to terminate"); });