我希望使用npm MySQL创建与单独文件的连接。我期望在每次触发查询时导出连接变量或池变量。如果我将其他文件分开,我当前的方法每次都会重新创建连接。
// connection.js
'use strict';
var mysql = require('mysql');
var sys = require('util');
var exec = require('child_process').exec;
var config = require('config');
var db_config = {
host : config.get('databaseSettings.db_host'),
user : config.get('databaseSettings.db_user'),
password : config.get('databaseSettings.db_password'),
database : config.get('databaseSettings.database'),
port : config.get('databaseSettings.mysqlPORT'),
multipleStatements: true,
debug : ['ComQueryPacket']
};
var restart = function (callback) {
console.log('RESTART THE SERVER');
callback();
//exec("whoami; pm2 restart dashboard;", callback);
};
var handleDisconnect = function () {
connection = mysql.createConnection(db_config);
console.log('\n\n\t--In the handleDisconnect from connection to DB\n');
connection.connect(function (err) {
if (err) {
console.log('--DB CONNECTION ERROR - ');
setTimeout(handleDisconnect, 2000);
} else {
console.log('connection variable created ');
}
});
connection.on('error', function (err) {
console.log('--DB CONNECTION ERROR - ');
switch (err.code) {
case 'PROTOCOL_CONNECTION_LOST':
handleDisconnect();
break;
case 'PROTOCOL_ENQUEUE_AFTER_FATAL_ERROR':
restart();
break;
default:
throw err;
}
});
};
handleDisconnect();
这样,我希望从该文件导出连接/池连接。
答案 0 :(得分:3)
var mysql = require('mysql');
var db_config = {
//...
connectTimeout: 10000 //The milliseconds before a timeout occurs during
//the initial connection to the MySQL server.
};
var pool = mysql.createPool(db_config);
pool.getConnection(function(err, connection) {
// connected! (unless `err` is set)
});
pool.on('error', function(err) {
console.log(err.code); // 'ER_BAD_DB_ERROR'
// https://www.npmjs.com/package/mysql#error-handling
});
module.exports = pool;
var db = require('./connection.js'); // db is pool
db.query('SELECT 12 AS number', function(err, rows, fields) {
if (err) throw err;
console.log('The number is: ', rows[0].solution);
});
答案 1 :(得分:0)
通常应该在调用node.js模块的生命周期中保持一个连接。也就是说,挂在你的var mysql
上并重复使用它,直到模块终止(或直到你知道你不再需要它为止)。
你可以拥有一个"游泳池"但我建议你不要这样做,直到你找到它为止。如果/当你创建一个池时,我会建议10为connectionLimit。这个小到不成问题。需要更多的东西可能表明其他地方效率低下。 (常见问题是缺少良好的查询索引。)