Aún no tienes acceso a esta clase

Crea una cuenta y continúa viendo este curso

Integración de node-postgres

6/27
Recursos

Aportes 13

Preguntas 12

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad? Crea una cuenta o inicia sesión.

Serverless

💡Es un tipo de arquitectura que nos permite descentralizar los diferentes recursos existentes de nuestra aplicación.

.
En ocasiones, a serverless se le denomina sistemas distribuidos ya que permite, abstraer desde servidores hasta módulos denominados cloud functions.
.
Una de las principales ventajas de implementar serverless es la creación de arquitecturas como cliente-servidor, micro-servicios, entre otros.
.

Clean Architecture

💡Es un conjunto de principios cuya finalidad principal es ocultar los detalles de implementación a la lógica de dominio de la aplicación.

.
Las principal característica de Clean Architecture frente a otras arquitecturas es la regla de dependencia.
.
En Clean Architecture, una aplicación se divide en responsabilidades y cada una de estas responsabilidades se representa en forma de capa.
.

Definición de arquitectura

ℹ️Repositorio: https://github.com/roremdev/thingst
ℹ️Commit: https://github.com/roremdev/thingst/commit/ead31629469e5a3b923efc42b8b8eb5b18159b97

libs - directorio de drivers connection

.

Postgres.js

import { Pool as PostgresClient } from 'pg';

export default class Postgres {
    /**
     * @private
     * @description singleton pattern for pool connection
     * @returns {object} - connection client
     */
    async #connect() {
        try {
            if (!Postgres.connection) {
                Postgres.connection = new PostgresClient();
                console.log('Connected succesfully');
            }
            return Postgres.connection;
        } catch (error) {
            console.log(error);
        }
    }
    /**
     * @description query process in table
     * @param {string} request - SQL string request
     * @returns {Object} - response query postgresDB
     */
    async query(request) {
        try {
            const db = await this.#connect();
            return await db.query(request);
        } catch (error) {
            console.log(error);
        }
    }
}

ℹ️Nota. Se utiliza Pool para el manejo de múltiples conexiones por usuario donde se delega la administrador por el servidor.
.

services - directorio de controllers

.

Resource.js

import Postgres from '../libs/Postgres';

export default class ResourcesService {
    /**
     * @description DAO postgresDB tables
     * @param {string} table - table name
     */
    constructor(table) {
        this.table = table;
        this.client = new Postgres();
    }

    /**
     * @description find all registers in table
     * @returns {array} - response query mongoDB as array
     */
    async findAll() {
        const { rows } = await this.client.query(`SELECT * FROM ${this.table}`);
        return rows;
    }
}

.

routes - endpoints definition

.

Resource.js

import express from 'express';
import Resource from '../../services/Resource';

const router = express.Router();
const taskService = new Resource('tasks');

/**
 * @description get task operation
 * @param {string} path - express path
 * @param {callback} middleware - express generic middleware
 * @returns {ResponseObject}
 */
router.get('/', async (req, res, next) => {
    try {
        const data = await taskService.findAll();
        res.status(200).json({
            status: 'success',
            data,
            message: 'Retrieved all tasks',
        });
    } catch (error) {
        next(error);
    }
});

export default router;

Tonces!!!.. muchachos no saben cuanto me demore con el error de clave incorrecta para el usuario, no permitía conexión, verifique cambiando el puerto, nada, incluso borre el docker y volví a crear y nada.

La solución, quemar el pc jajajajajajajaja
Nee mentira, la solución?, pues resulta que tenia instalado pgAdmin localmente, pues fui a services.msc y detuve el servicio de pgadmin.

Y listo, ya estuvo funciono Ferpecto!

Si crearon variables de entorno en un archivo .env también pueden reutilizarlas sin quemarlas en el archivo.

  1. Primero tenemos que instalar el módulo dotenv
npm i dotenv
  1. Después importamos dotenv en nuestro archivo de postgres.js
require('dotenv').config();
  1. Por último reemplazamos los valores de la base de datos por nuestras variables de entorno de la siguiente manera:
process.env.VARIABLE_DE_ENTORNO

Quedaría algo así:

require('dotenv').config();
const { Client } = require('pg');

async function getConnection() {
  const client = new Client({
    host: 'localhost',
    port: 5432,
    user: process.env.DB_USER,
    password: process.env.DB_PASSWORD,
    database: process.env.DB_NAME,
  });
  await client.connect();
  return client;
}

module.exports = getConnection;

¡Espero les sirva! 😄

Al me funciono ya que me daba un error tipo:

FATAL:  password authentication failed for user "edward"

todo el dia comprebe varias veces que el usuario y
contraseña fueran indenticas a las de las varibles del servicio de postgress del archivo docker-compose.yml,
incluso descarge todo los archivos de la esta clase, elimine y volvi a instalar npm, containers y volumenes de docker, para comprobar con el usuario y contrasena de “nico” y “admin123” del profe, busque informacion e intente de otras maneras, me seguia dando siempre el mismo error. Curiosamente al final la solucion que me funciono fue desinstalar y volver a instalar docker.

Este conocimiento vale oro!

yo tuve problemas con el query que se usa en el video, asi que lo tuve que cambiar por

const rta = await client.query('SELECT * FROM public.tasks')

comandos

npm install pg

a mi me dice que mi password es incorrecto, cuando esta indetico a como lo tengo en mi docker-compose 😕

Si alguien tiene algo como

FATAL: password authentication failed for user

respuesta en:

Magia!!!

Por si les da error de conexión, borrar todo el contenido de la carpeta postgres_data y volver a ejecutar

docker-compose up -d postgres

me solucionó el problema.

Comando Descripcion
npm install pg Driver de node

para los que tuvieron problemas con wsl para esta clase, les recomiendo en este caso instalar node desde windows y asi evitan problemas con puertos