如何在使用NodeJS和Express时创buildMySQL连接池?

我可以像这样创build一个MySQL连接:

var mysql = require('mysql'); var connection = mysql.createConnection({ host : 'localhost', user : 'me', password : 'secret', database : 'my_db' }); connection.connect(); 

但我宁愿创build一个池,并在整个项目中使用它。

只是为了帮助未来的人,这对我有效:

我创build了一个包含池的mysql连接器文件:

 // Load module var mysql = require('mysql'); // Initialize pool var pool = mysql.createPool({ connectionLimit : 10, host : '127.0.0.1', user : 'root', password : 'root', database : 'db_name', debug : false }); module.exports = pool; 

稍后,您可以简单地将连接器包含在另一个文件中,让它称为manageDB.js:

 var pool = require('./mysqlConnector'); 

并提出了一个可调用的方法是这样的:

 exports.executeQuery=function(query,callback){ pool.getConnection(function(err,connection){ if (err) { connection.release(); throw err; } connection.query(query,function(err,rows){ connection.release(); if(!err) { callback(null, {rows: rows}); } }); connection.on('error', function(err) { throw err; return; }); }); } 

Utkarsh Kaushik解决scheme中存在一些错误:

  • 如果(err),连接不能被释放。 connection.release();

  • 当它有一个错误,下一个语句.query总是执行,虽然它得到一个错误,并导致应用程序崩溃。

  • 当结果为空时,虽然查询成功,但是在这种情况下,我们需要检查结果是否为空。

这个解决scheme在我的情况下效果很好

 exports.getPosts=function(callback){ pool.getConnection(function(err,connection){ if (err) { callback(true); return; } connection.query(query,function(err,results){ connection.release(); if(!err) { callback(false, {rows: results}); } // check null for results here }); connection.on('error', function(err) { callback(true); return; }); }); }; 

你可以创build一个连接文件,我们称之为dbcon.js

 var mysql = require('mysql'); // connect to the db dbConnectionInfo = { host: "localhost", port: "3306", user: "root", password: "root", connectionLimit: 5, //mysql connection pool length database: "db_name" }; //For mysql single connection /* var dbconnection = mysql.createConnection( dbConnectionInfo ); dbconnection.connect(function (err) { if (!err) { console.log("Database is connected ... nn"); } else { console.log("Error connecting database ... nn"); } }); */ //create mysql connection pool var dbconnection = mysql.createPool( dbConnectionInfo ); // Attempt to catch disconnects dbconnection.on('connection', function (connection) { console.log('DB Connection established'); connection.on('error', function (err) { console.error(new Date(), 'MySQL error', err.code); }); connection.on('close', function (err) { console.error(new Date(), 'MySQL close', err); }); }); module.exports = dbconnection; 

现在将此连接包含到另一个文件中

 var dbconnection = require('../dbcon'); dbconnection.query(query, params, function (error, results, fields) { //Do your stuff });