Para conectar node con postgres requerimos del paquete pg
, un driver que nos permite hacer queries y demás a la base de datos; pg
se puede instalar con cualquier gestor de dependencias para node.
npm install pg
yarn add pg
Después de que tengamos la dependencia instalada solo debemos importar la clase Client
del driver y darle las credenciales necesarias para configurar la conexión:
const { Client } = require("pg");
const getConnection = async () => {
const client = new Client({
host: "localhost",
port: 5432,
user: "your_username",
password: "your_password",
database: "my_store"
});
await client.connect();
return client;
};
module.exports = {
getConnection
};
La clase Client
recibe los siguientes parámetros:
host
→ el host de nuestra base de datos.port
→ el puerto de nuestra máquina que está vinculado al puerto del contenedor en que se está ejecutando la instancia de postgres (revisar la config de docker-compose).user
→ el valor de la variable de entorno POSTGRES_USER
que se declaró en la sección environment
del servicio de postgres (revisar la config de docker-compose).password
→el valor de la variable de entorno POSTGRES_PASSWORD
que se declaró en la sección environment
del servicio de postgres (revisar la config de docker-compose).database
→ el valor de la variable de entorno POSTGRES_DB
que se declaró en la sección environment
del servicio de postgres (revisar la config de docker-compose).De esta forma tenemos la conexión lista y podemos utilizar la función getConnection
en cualquier parte que necesitemos conectarnos a la base de datos.
La conexión que acabamos de realizar funciona perfectamente, pero no es lo mejor que podemos hacer ¿Por qué? Es bastante simple, cada vez que utilizamos la función getConnection
estamos creando una nueva conexión con la base de datos, lo cual no es lo mejor si tuviéramos muchísimas peticiones a la base de datos frecuentemente.
El pooling nos permite crear una sola conexión que reutilizamos para todas las consultas que le hagamos a la base de datos. pg
nos da la posibilidad de lograr esto con otra de sus clases: Pool
.
const { Pool } = require("pg");
const pool = new Pool(...configObject);
module.exports = {
pool
};
Pool
recibe un objeto de configuración exactamente igual al que recibeClient
.
Y de esta forma podemos reutilizar la misma conexión en nuestra app.
Pool
yClient
pueden recibir un solo parámetro que puede reemplazar todos los anteriores;connectionString
nos permite pasar una URI que siga el siguiente formato:
postgres://user:password@host:port/database