node-postgres: [ошибка] Этот сокет был закрыт другой стороной

Я использую node-protgres для управления базой данных в моем приложении nodejs.

Что я наделал:

const { Pool, Client } = require('pg')
var dbconnect = {
    user: 'xxxxx',
    database: 'xxxxx',
    password: 'xxxxx', 
    host: 'xxxxx.yyyyy.zzzzz.eu-west-1.rds.amazonaws.com',
    port: 0000, 
    max: 20, // max number of clients in the pool
    idleTimeoutMillis: 30000,
    connectionTimeoutMillis: 2000 
};
const pool = new Pool(dbconnect);
pool.on('error', function (err, client) {
    console.error('idle client error', err.message, err.stack)
});

function listOfPets(req, res) {

 pool.connect(function (err, client, done) {
        if (err) {
            return console.error('error fetching client from pool', err);
        }

        var sql =
            "SELECT * FROM pets"
        client.query(sql, function (err, result) {

                done();

                if (err) {
                    return console.error('error running query', err);
                }

                ... //Handle the result 

            });
    });

}

Функция работает нормально, однако сервер продолжает присылать мне отчет об ошибке от ОК до серьезного. Я проверил журнал:

ошибка неактивного клиента Этот сокет был завершен другой стороной Ошибка: этот сокет был завершен другой стороной в Socket.writeAfterFIN [как запись] (net.js: 291: 12) в Connection.end (/ var / app / current / node_modules / pg / lib / connection.js: 313: 22) в global.Promise (/var/app/current/node_modules/pg/lib/client.js:410:23) в Client.end (/ var / app / current / node_modules / pg / lib / client.js: 409: 12) в Pool._remove (/var/app/current/node_modules/pg-pool/index.js:135:12) в Timeout.setTimeout (/ var / app / current / node_modules / pg-pool / index.js: 38: 12) в ontimeout (timers.js: 365: 14) в tryOnTimeout (timers.js: 237: 5) в Timer.listOnTimeout (timers.js : 207: 5)

Я думаю, проблема возникла из-за того, что «done ()» не работает или был помещен не в то место.

Любое предложение приветствуется.


person franco phong    schedule 14.09.2017    source источник


Ответы (2)


Попробуйте объявить объект pool внутри обратного вызова. У меня была аналогичная ошибка с клиентом postgres. Я решил это, объявив client внутри обратного вызова для запроса GET.

Взгляните на эту проблему, здесь я нашел свое решение: проблема Github

person Beni Trainor    schedule 17.10.2019

Надеюсь, это поможет вам =). Я думаю, вы можете использовать эту ссылку для исправления http://mherman.org/blog/2015/02/12/postgresql-and-nodejs/#.WbpNjMgjGHs

person xuan hung Nguyen    schedule 14.09.2017
comment
Привет, спасибо, что поделились статьей. Учебник не использует пул и приводит к использованию pg-prom вместо node-postgres. Какой из них вы предлагаете мне использовать? Кстати, это полезная статья - person franco phong; 14.09.2017