Я создаю код, используя только модуль pg , где у меня есть общая функция для выполнения запросов.Эта функция может создать клиента на месте, если он не принимает уже существующего клиента в качестве аргумента.Или он может использовать уже существующий клиент для выполнения запроса.Так что я могу вызвать эту функцию как (псевдокод)
const {Client} = require('pg');
const clientobj = {user:...}
generalQuery(text, params, client){
if !client{client = new Client(clientobj);}
client.query(text , params)
client.end();
else
client = client
client.query(text , params)
return query results
}
call like
generalQuery(text, params, false)
or via another function that already created a client
anotherFunction(){
client = new Client(clientobj);
client.query(insert)...
do some things with the results
generalQuery(text, params, client)
do some things with the results
now client.end();
}
exports.anotherFunction= anotherFunction;
exports.generalQuery= generalQuery;
Итак, если у меня уже есть созданный клиент, мне не нужно создавать еще один в generalQuery
, и я отключаю клиент только после того, как результатывернулся в anotherFunction
.Кроме того, я могу назвать generalQuery
«как есть», когда захочу, и он справится с остальными.
Как pg-обещание может справиться с этим?За исключением особых случаев, в общем, это не разоблачает client
.
Так что я думаю, что мне нужно реорганизовать мой код и иметь общую функцию запроса, которая всегда будет обрабатывать подключение и отключение клиента внутри, и никогда не вызывать эту функцию с уже существующим клиентом.Псевдокод
const pgp = require('pg-promise')();
const db = pgp(connection);
generalQuery(text, params){
db.any(text, params)//all client connection/disconnection is handled here
.then(function(data) {
// success;
})
.catch(function(error) {
// error;
});
}
call like
generalQuery(text, params)
or via another function that never has an already created client
anotherFunction(){
generalQuery(text, params)
do some things with the results
generalQuery(text, params)
do some things with the results
}
exports.anotherFunction= anotherFunction;
exports.generalQuery= generalQuery;
Итак, с помощью pg-обещания нет необходимости иметь логику моего первого примера, и только общая функция запроса создает и обрабатывает соединения.Означает ли это, что он также автоматически обрабатывает разъединения?Пожалуйста, посоветуйте, если я делаю что-то не так или пропускаю что-то важное.
Спасибо