Как мне использовать node-postgres на сервере?
Я пишу веб-сервер Node.js, который использует базу данных Postgres. Я использовал для подключения при каждом новом запросе, как это:
app.get('/', function (req, res) {
pg.connect(pgconnstring, function (err, client) {
// ...
});
});
Но после нескольких запросов я заметил ошибки «нехватки памяти» на Heroku при попытке подключения. В моей базе данных всего 10 строк, поэтому я не понимаю, как это могло произойти. Весь мой доступ к базе данных имеет следующую форму:
client.query('SELECT * FROM table', function (err, result) {
if (err) {
res.send(500, 'database error');
return;
}
res.set('Content-Type', 'application/json');
res.send(JSON.stringify({ data: result.rows.map(makeJSON) }));
});
Предполагая, что ошибка памяти произошла из-за наличия нескольких постоянных подключений к базе данных, я переключился на стиль, который видел в несколькихnode-postgres
Примеры подключения только один раз в верхней части файла:
var client = new pg.Client(pgconnstring);
client.connect();
app.get('/', function (req, res) {
// ...
});
Но теперь мои запросы зависают (на неопределенное время?), Когда я пытаюсь выполнить запрос после разрыва соединения. (Я смоделировал это, убив сервер Postgres и вернув его обратно.)
Так как мне сделать один из них?
Правильно объединяйте соединения Postgres, чтобы я мог «переподключаться» каждый раз без нехватки памяти.Глобальный клиент автоматически переподключится после сбоя сети.