如何在node.js中的模块之间共享连接池?

如何在node.js中的模块之间共享连接池?,node.js,postgresql,connection-pooling,node-modules,pg,Node.js,Postgresql,Connection Pooling,Node Modules,Pg,我对如何在node.js模块中正确实现postgres连接池知之甚少或一无所知 我的问题是:当我在需要连接到pg的每个模块中创建新池时,这是否有问题 有没有办法为整个应用程序全局创建池 谢谢。在文件中定义池,比如pgpool.js var pg = require('pg'); var pool; var config = { user: 'foo', database: 'my_db', password: 'secret', port: 5432, max: 10,

我对如何在node.js模块中正确实现postgres连接池知之甚少或一无所知

我的问题是:当我在需要连接到pg的每个模块中创建新池时,这是否有问题

有没有办法为整个应用程序全局创建池


谢谢。

在文件中定义池,比如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();

我建议不要导出池,而是导出一个提供到池的连接的函数。使用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);
      });
    });
  }
} 

我做了一个示例,您可以在其中阅读更多内容

或者,您可以使用
module.exports=new pg.Pool(config)
。由于模块缓存,这将始终将池的同一实例返回到
需要它的每个文件中。我可以确认这对mysql npm包也有效。谢谢