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好的查询索引。)