如何在 node.js 中的模块之间共享连接池?
Posted
技术标签:
【中文标题】如何在 node.js 中的模块之间共享连接池?【英文标题】:How to share connection pool between modules in node.js? 【发布时间】:2016-12-09 10:16:10 【问题描述】:我对如何在 node.js 模块中正确实现 postgres 连接池知之甚少。
我的问题是:当我在需要连接到 pg 的每个模块中创建新池时是否有问题?
有没有办法为整个应用程序全局创建池?
谢谢。
【问题讨论】:
【参考方案1】:我建议不要导出池,而是提供与其连接的函数。使用 promise-mysql
var mysql = require('promise-mysql');
var connectionPool = mysql.createPool(
host : "127.0.0.1",
user : '******',
password : '******',
database : '******',
port : '3306'
);
module.exports=
getConnection: function()
return new Promise(function(resolve,reject)
connectionPool.getConnection().then(function(connection)
resolve(connection);
).catch(function(error)
reject(error);
);
);
我发了simple blog post about MySQL pool sharing,你可以在这里阅读更多
【讨论】:
【参考方案2】:在 pgpool.js 文件中定义池
var pg = require('pg');
var pool;
var config =
user: 'foo',
database: 'my_db',
password: 'secret',
port: 5432,
max: 10,
idleTimeoutMillis: 30000,
;
module.exports =
getPool: function ()
if (pool) return pool; // if it is already there, grab it here
pool = new pg.Pool(config);
return pool;
;
像这样使用它:
var db = require('./a/path/to/pgpool.js');
var pool = db.getPool();
【讨论】:
或者,您可以使用module.exports = new pg.Pool(config)
。由于模块缓存,这将始终将池的相同实例返回到 require
的每个文件。
我可以确认这也适用于 mysql npm 包。谢谢以上是关于如何在 node.js 中的模块之间共享连接池?的主要内容,如果未能解决你的问题,请参考以下文章
node.js mysql 池 beginTransaction & 连接