我在Heroku上部署了一个NodeJS API,并尝试将其连接到MySQL数据库。为此,我创建了一个连接池来处理ClearDB ignite帐户上(免费)的连接,该帐户最多允许10个连接。
我尝试将createPool()更改为createConnection(),然后在每个查询后立即调用.end()/.destroy()函数,但这根本不起作用。有什么提示吗?
每次执行数据库查询时,它只会将新连接添加到堆栈中,直到达到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()函数,但这根本不起作用。有什么提示吗?
Dao.prototype.findAll = function (callback) { this._connection.query('SELECT * FROM table', function(errors, results) { callback(errors,results); this._connection.release(); }); };
。但是,我会收到以下错误:Error: Connection already released
,应用程序会立即崩溃。 - Marcelopool.getConnection
返回的对象。 - EMXConnection already released
错误。我尝试使用connection.destroy()
代替,在本地它确实销毁了连接,一切都很好。但是如果我在ClearDB上做完全相同的事情,命令destroy()
似乎不起作用。它仍然会堆叠连接! - Marceloconnection.release()
?我认为问题是你使用连接方式的问题(使用node打开它们),而不是ClearDB的问题。 - EMXmysql
更改为pg
,就轻松解决了问题。我知道这不是我的问题的解决方案,而是(极端)变通的方法,所以我不会将其用作答案。谢谢! - Marcelo