如何在使用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 });