Nodejs mysql pool使用实例,mysql连接池
在开发web应用程序时,连接池是一个很重要的概念。建立一个数据库连接所消耗的性能成本是很高的。在服务器应用程序中,如果为每一个接收到的客户端请求都建立一个或多个数据库连接,将严重降低应用程序性能。
因此在服务器应用程序中通常需要为多个数据库连接创建并维护一个连接池,当连接不再需要时,这些连接可以缓存在连接池中,当接收到下一个客户端请求时,从连接池中取出连接并重新利用,而不需要再重新建立连接。
语法:(1)创建连接池 createPool方法
var pool = mysql.createPool(optioins);options参数包含createConnection方法中可以使用的各种属性,除此之外还有以下属性:createConnection,waitForConnections,connectionLimit,queueLimit。
(2)从连接池中取出连接。getConnection方法。如无连接可用则隐式的建立一个数据库连接。
pool.getConnection(function(err,connection))。回调函数中的err为错误对象,connection为获取到的连接对象。
(3)当连接不再使用时,用connection对象的release方法将其归还到连接池中。connection.release();
(4)当一个连接不再需要使用且需要从连接池中移除时,用connection对象的destroy方法。connection.destroy(); 连接移除后,连接池中的连接数减一。
(5)当一个连接池不再需要使用时,用连接池对象的end方法关闭连接池。pool.end();
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
var express = require('express'); var router = express.Router(); var mysql = require('mysql'); var conf = require('../config/dbconnection'); //定义pool池 var pool = mysql.createPool( { host : conf.dbMysql.host, user : conf.dbMysql.user, password : conf.dbMysql.password, database : conf.dbMysql.database, port : conf.dbMysql.port } ); router.get('/', function(req, res) { var selectSites = "select *, date_format(do_time, '%Y-%m-%d %H:%i:%s') as time from siteinfo order by id"; pool.getConnection(function(err, connection) { if (err) throw err; connection.query(selectSites, function(err, rows) { if (err) throw err; res.render('sites', {title : '站点分布', results : rows}); //回收pool connection.release(); }); }); }); module.exports = router; |