MySQLプールがNodeJSアプリケーションからの接続を解放していないようです。 mysqlからサーバープロセスを見ると、接続は確立されていても解放されません。NodeJS Mysql - 接続が解放されていません
アプリは、次のエラーでクラッシュしています:TypeError: Cannot read property 'query' of undefined
。私の理解から、これは私が接続の限界を超えたためです。
私はHeroku MySQLプラグインを使用しており、テストには10個の接続があります。 .env DB_URLの最後にconnectionLimitを追加してプール内の接続を制限しようとしました。
私.envファイル、リンクはようにフォーマットされて: DEV_DB_URL=mysql://user:[email protected]:3306/db_name?connectionLimit=5
db.jsファイル:
var mysql = require('mysql');
var dbURL = process.env.PRODUCTION === 'true'
? process.env.LIVE_DB_URL
: process.env.DEV_DB_URL;
var dbConnection = function dbConnection(sql, values, next){
// It means that the values hasn't been passed
if (arguments.length === 2){
next = values;
values = null;
}
var pool = mysql.createPool(dbURL);
pool.getConnection(function(err, connection){
connection.query(sql, values, function(err) {
connection.release();
if (err) {
throw err;
}
// Execute the callback
next.apply(this, arguments);
});
});
};
module.exports = dbConnection;
db.jsファイルを使用して私のコントローラは次のようになります。
var DB = require('../services/db');
exports.updateReporting = function(req, res){
var body = req.body;
var sentStatus = body.edc;
if(sentStatus === 'pass'){
res.status(200)
.send({
message: 'EDC is all good.'
})
}
if(sentStatus === 'fail'){
var dateTime = require('node-datetime');
var dt = dateTime.create();
var curTimestamp = dt.format('Y-m-d H:M:S');
var storeId = body.store_id
.substring('Addr1='.length);
var fileTimestamp = body.file_ts;
var data = {
status: sentStatus,
store_id: storeId,
file_ts: fileTimestamp,
current_ts: curTimestamp
};
DB('INSERT INTO edc_reporting SET ?', data, function(err, row){
if (err) throw err;
});
res.status(200)
.send({
message: 'Message recorded.'
})
}
};
私はノードに新しいので、connection.release()
が間違った場所にあり、コールバックのために実行されていないかどうかわかりませんか?
何か指摘していただければ幸いです。