Как закрыть приложение 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 при последующих вызовах
  • Правильно завершайте приложение в конце каждого вызова

Спасибо


person Smruti Mandal    schedule 09.12.2016    source источник


Ответы (1)


Правильно завершайте приложение в конце каждого вызова

Вы абсолютно НЕ должны этого делать, закрытие всего пула соединений после каждого запроса - ужасная идея.

Повторно использовать объект соединения pgp при последующих вызовах

В чем сложность? Вы спрашиваете, как повторно использовать объекты в Node.js?

См. также: Где я должен инициализировать pg-promise.

И вам следует воздержаться от использования метода db.connect таким образом, это не лучший способ использования фреймворка. Вместо этого вы должны полагаться на автоматические соединения;)

person vitaly-t    schedule 09.12.2016
comment
Я реализовал уровень кеша в приложении, чтобы сохранять соединения с базой данных через вызовы API. - person Smruti Mandal; 09.12.2016