2

我正在尝试编写一个 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 连接对象
  • 在每次通话结束时正确终止应用程序

谢谢

4

1 回答 1

2

在每次通话结束时正确终止应用程序

您绝对不应该这样做,每次查询后关闭整个连接池是一个糟糕的主意。

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

有什么并发症?您是否在问如何在 Node.js 中重用对象?

另请参阅:我应该在哪里初始化 pg-promise

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

于 2016-12-09T13:32:09.963 回答