如何结束' pg-promise'应用

时间:2016-12-09 13:21:52

标签: javascript node.js node-postgres pg-promise

我正在尝试编写一个REST API,它基于请求有效负载选择数据库并执行某些操作。

根据文档,我将在操作结束时释放共享连接对象,然后通过结束pgp应用程序来完成它。

    var pgp = require('pg-promise')();

    var connection = {
      user: 'generaluser', //env var: PGUSER
      database: 'seeddb', //env var: PGDATABASE
      password: '$$$$$$$', //env var: PGPASSWORD
      host: 'localhost', // Server hosting the postgres database
      port: 5432 //env var: PGPORT
    };

    var sco;

    module.exports = {
        getuser: function(req, res)
      {
        Account.findOne({ select: [ 'database' ], where: { appid: req.body.appid } })
        .then(function (result)
        {
          connection.database = result.database;
          var db = pgp(connection);
          return db.connect();
        })
        .then(function (obj)
        {
          sco = obj;
          return sco.any("select * from users");
        })
        .then(function (result)
        {
          console.log(result);
          return sco.done();
        })      
        .done(function ()
        {
          pgp.end();
          return res.ok("Done");
        });
      }
    };

尽管如此,我仍然从第二次API调用(到同一个数据库)开始得到以下错误:

WARNING: Creating a duplicate database object for the same connection.

有人可以通过以下任何一种方式帮助我

  • 在后续调用中重用pgp连接对象
  • 在每次通话结束时正确终止应用程序

由于

1 个答案:

答案 0 :(得分:1)

  

在每次通话结束时正确终止申请

你绝对不应该这样做,在每次查询都是一个糟糕的想法后关闭整个连接池。

  

在后续调用中重用pgp连接对象

复杂情况是什么?你是否要问如何在Node.js中重用对象?

另请参阅:Where should I initialize pg-promise

你应该远离使用这样的方法db.connect,这不是一个使用框架的好方法。您应该依赖自动连接;)