How pg-promise handles multiple clients in the same app

左心房为你撑大大i 提交于 2019-12-11 21:51:43

问题


I am creating code using just the pg module, where I have a general function for executing queries. This function can create a client on the spot if it doesn't take an already existing client as an argument. Or it can use an already existing client to execute a query. So I can call this function like (pseudocode)

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;

So, if I have an already created client, I dont need to create another one in generalQuery and I disconnect the client only after the results are returned in the anotherFunction. Plus I can call the generalQuery "as is" anytime I want and it will handle the rest.

How does pg-promise can handle that? Except special occasions, in general, it doesnt expose a client.

So I guess I have to refactor my code and have a general query function, that will always handle client connection and disconnection internally, and never call this function with an already existing client. Pseudocode

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; 

So, with the pg-promise, there is no need to have the logic of my first example, and only the general query function creates and handles connections. Does this mean that it also automatically handles disconnections? Please advice if I am doing anything wrong or if I am missing something important.

Thank you

来源:https://stackoverflow.com/questions/50682309/how-pg-promise-handles-multiple-clients-in-the-same-app

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!