NPM MySql连接需要在文件中分开

我希望创build连接到使用npm MySQL单独的文件。 我期待导出连接variables或池variables到每次我触发查询。 我目前的做法是每次重新创build连接,如果我分开另一个文件。

//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(); 

这样,我希望从这个文件导出连接/池连接。

connection.js

 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; 

otherfile.js

 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); }); 

通常在调用node.js模块的一生中应该保持一个连接。 也就是说,挂在你的var mysql用它,直到模块终止(或者直到你知道你不再需要它)。

你可以有一个“池”,但我build议不要这样做,直到你find需要它。 如果/当你创build一个池,我会build议10为connectionLimit。 这足够小,不成问题。 需要更多的这可能表明其他地方效率低下。 (一个常见的问题是缺less好的查询索引。)