2
HerokuにNodeJS APIをデプロイしてMySQL DBに接続しようとしたため、ClearDBの着信アカウント(無料)で接続を処理するconnectionPoolを作成しました。接続。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'、 関数(エラー、結果){ コールバック(エラー、結果); this._connection.release(); }); }; '。しかし、私は次のエラーを受け取ります: 'Error:Connection already released'とアプリがすぐにクラッシュします。 – Marcelo
これは、いくつかのアクションを実行するためにリリースしたのと同じ接続を使用しているため、または自分自身でリリースを呼び出しているときに、コールバックの前に実行してください。接続は実際には 'pool .getConnection' – EMX
私はコールバックの前にconnection.release()を呼び出そうとしましたが、 'Connection already released'エラーを返しています。私は代わりに 'connection.destroy()'を使って試してみました**そして**ローカルに**本当に接続を破壊して、すべてがうまくいきます。しかし、ClearDBで同じことをすると、 'destroy()'コマンドは動作しないようです。それはとにかくスタッキング接続を維持します! – Marcelo