2016-07-23 53 views
0

我使用的Heroku Postgres的每一次我在我的应用程序运行查询时的连接保持打开状态。这导致太多的同时连接并因此导致错误。管理连接PostgreSQL和Node.js的

当部署后,我用我的应用程序进行了一下我得到这个错误:

{"name":"error","length":109,"severity":"FATAL","code":"53300","file":"miscinit.c","line":"551","routine":"InitializeSessionUserId"} 

当我在本地运行我得到这个错误:

{"name":"error","length":109,"severity":"FATAL","code":"53300","file":"miscinit.c","line":"551","routine":"InitializeSessionUserId"} 

这是我的方式我每次需要查询数据库时都会处理查询:

router.route('/campaigns') 
    .get(restrictTo('advertiser'), function(req, res) { 
     pg.defaults.ssl = true; 
     pg.connect(`DATABASE_URL`, function(err, client, done) { 
      if (err) { 
       console.log('Connection issue when retrieving data, error will be thrown: ' + JSON.stringify(err)); 
       throw err; 
      } else { 
       client.query(`SELECT * FROM campaign WHERE agentid = ${req.user.agentid};`, 
        function (err, result) { 
         if(err) 
          console.log(err.toString()); 
         res.render('console/campaigns', result); 
        }); 
      } 

     }) 
    }) 

我做错了什么,因为我相信连接不会关闭。我该如何解决它?

+0

如果使用[PG-承诺(https://github.com/vitaly-t/pg-promise),你将永远不会有这样那样的问题,因为你不会需要做的手动连接所有。 –

+0

是的,这就是我所做的,但是我花了整整一天才弄清楚了这一点。 – ocram

+0

@ vitaly -t我会对'pg-promise'有个疑问:http://stackoverflow.com/questions/38545958/return-in-pg-promise – ocram

回答

0

我认为你应该使用client.end();每个查询完成关闭连接后。