Я пишу приложение node.js на Heroku и используя pg module. Я не могу понять, «правильный» способ получить клиентский объект для каждого запроса, который мне нужен для запроса базы данных.Каков правильный способ использования модуля node.js postgresql?
документация использует такой код:
pg.connect(conString, function(err, client) {
// Use the client to do things here
});
Но, конечно, вам не нужно вызывать pg.connect
внутри каждую функцию, которая использует право базы данных? Я видел other code, что делает это:
var conString = process.env.DATABASE_URL || "tcp://postgres:[email protected]/postgres";
var client = new pg.Client(conString);
client.connect();
// client is a global so you can use it anywhere now
Я склоняюсь к второму варианту, так как я считаю, что свободный экземпляр базы данных для Heroku ограничивается одним соединением в любом случае, но есть какие-либо недостатки делать это таким образом? Нужно ли проверять, все ли мой клиентский объект все еще подключен каждый раз, прежде чем использовать его?
Извините, я довольно новичок в СУБД, и у меня все еще есть проблема с пониманием этого, но почему мы не хотим «мусор pg.connect», звонки? Это для простоты или из-за соображений производительности? Например, я вызываю pg.connect один раз в каждом из маршрутов, которые у меня есть в моем базовом приложении (все с тем же conString). Это нормально? Интуитивно, кажется, что он создает новое соединение с тем же самым db, когда я его вызываю (чего я не хочу), но использует ли он объединенные соединения внутри? Благодарю. – user1164937
Awesome. Почему вы используете одно соединение для каждого запроса вместо одного запроса? Я искал подходящий способ совместного использования соединения по нескольким запросам в запросе и рассматривал res.locals, прежде чем найти свой ответ здесь. –
О, подождите. Похоже, ваше решение здесь не поддерживает транзакции. –