2
我在Heroku上部署了一個NodeJS API,並試圖將它連接到MySQL DB,因此我創建了一個用於處理ClearDB點火帳戶(免費)連接的connectionPool,它允許最多10個連接。NodeJS:Heroku ClearDB未關閉連接
每次我對數據庫執行查詢時,它都會向堆棧添加一個新連接,直到它達到10個連接並且應用程序崩潰。
我的代碼如下:
的connectionFactory:
var mysql = require('mysql');
function createDBConnection() {
var conn = mysql.createPool({
host: 'xxx',
user: 'xxx',
password: 'xxx',
database: 'xxx'
});
return conn;
}
module.exports = function() {
return createDBConnection;
}
這是我的選擇查詢:
function Dao(connection) {
this._connection = connection;
}
Dao.prototype.findAll = function (callback) {
this._connection.query('SELECT * FROM table',
function(errors, results) {
callback(errors,results);
});
};
module.exports = function() {
return Dao;
}
最後這裏是我用來調用它的路線:
app.get('/products', function (req,res) {
var connection = app.persistence.connectionFactory();
var dao = new app.persistence.Dao(connection);
dao.findAll(function (err, result) {
res.format({
json: function() {
res.json(result);
}
});
});
});
我嘗試將createPool()更改爲createConnection(),然後在每個查詢後立即調用.end()/。destroy()函數,但它根本不起作用。
任何提示?
如果我添加connection.release()我的代碼看起來是這樣的:'Dao.prototype.findAll =函數(回調){ this._connection.query('SELECT * FROM table', function(errors,results){ callback(errors,results); this._connection.release(); }); };'。但後來我得到以下錯誤:'錯誤:連接已經釋放'和應用程序立即崩潰。 – Marcelo
這是因爲您使用的是與您發佈的相同連接來執行某些操作,或者在您自己調用該版本時它已經被釋放,請嘗試在回調之前執行該操作,而連接實際上是指由'pool返回的對象.getConnection' – EMX
我試着在回調之前調用connection.release(),但它一直給我'Connection already released'錯誤。我嘗試使用'connection.destroy()'而不是**本地**它真的破壞了連接,一切都很好。但是如果我在ClearDB上做同樣的事情,命令'destroy()'似乎不起作用。無論如何它始終保持堆疊連接! – Marcelo