【问题标题】:How to end 'pg-promise' app如何结束“pg-promise”应用程序
【发布时间】:2017-04-24 23:52:10
【问题描述】:

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

谢谢

【问题讨论】:

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


    【解决方案1】:

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

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

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

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

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

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

    【讨论】:

    • 我已经在应用程序中实现了一个缓存层,以跨 API 调用保持数据库连接。
    猜你喜欢
    • 2017-03-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-14
    • 1970-01-01
    • 2019-05-05
    • 1970-01-01
    • 2018-05-07
    相关资源
    最近更新 更多