Aún no tienes acceso a esta clase

Crea una cuenta y continúa viendo este curso

¿Qué es un ORM? Instalación y configuración de Sequelize ORM

9/27
Recursos

Aportes 12

Preguntas 4

Ordenar por:

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

ORM

💡Un ORM es un modelo de programación que permite mapear las estructuras de una base de datos relacionales.

.
Al abstraer este tipo de programación, delegamos su implementación al backend, es decir, le añadimos una de responsabilidad a la capa transaccional del servidor:
.
✨Los beneficios son los siguientes:

  • Acciones como CRUD (Create, Read, Update, Delete) son administradas mediante ORM.
  • La implementación de seeds o semillas, nos permiten recuperar, mediante código, la estructura de una BD.

.
Una de las bases teóricas para entender este modelo es mediante el conocimiento de DAO (Data Access Object) y DTO (Data Transfer Object), los cuales nos permiten desestructurar un ORM en módulos de abstracción para acceder a la DB y transferir datos desde la misma DB, respectivamente hablando.
.
🙃Los contras sería:

  • Delegación de responsabilidades al server
  • Descentralización de trabajo, directa, de una BD.

Si les sale el mensaje en consola:

[SEQUELIZE0002] DeprecationWarning: The logging-option should be either a function or false. Default: console.log

solo deben cambiar en lib/sequelize.js donde dejaron

logging: true

por

logging: console.log

hay una manera mas avanzada que es crear su propia función pero creo que ya será para después 😃

comandos

 npm install --save sequelize

npm install --save pg-hstore

Un ORM (Object Relational Model) transforma y mapea nuestra BD con métodos de la programación orientada a objetos. Se pueden ejecutar métodos en lugar de consultas. La ventaja es que es agnóstico, no importa si se está usando MySQL, PostgreSQL, MariaDB, no hay problema mientras la BD use SQL.

Hay 2 ORM muy populares, se recomienda Sequelize para JavaScript y TypeORM para TypeScript.

Para instalarla → npm install --save sequelize

De acuerdo a la BD, se deben instalar los drivers:

# One of the following:
$ npm install --save pg pg-hstore # Postgres
$ npm install --save mysql2
$ npm install --save mariadb
$ npm install --save sqlite3
$ npm install --save tedious # Microsoft SQL Server

La configuración y conexión se gestiona en la capa de librerías (libs), se crea el archivo sequelize.js:

const { Sequelize } = require('sequelize');

const { config } = require('../config/config');

const USER = encodeURIComponent(config.dbUser);
const PASSWORD = encodeURIComponent(config.dbPassword);
const URI = `postgres://${USER}:${PASSWORD}@${config.dbHost}:${config.dbPort}/${config.dbName}`;

const sequelize = new Sequelize(URI, { dialect: 'postgres', logging: true }); // Se crea una instancia de Sequelize, ya gestiona el pooling.

module.exports = sequelize;

dialect → Para indicar que BD se está usando

logging Cada vez que se haga una consulta con el ORM, en la consola se muestra el resultado o el igual en comando directo SQL.

Realizando consulta:

Archivo product.service.js:

const sequelize = require('../libs/sequelize');

async find() {
    const query = 'SELECT * FROM tasks';
    const [data] = await sequelize.query(query);
    return data;
  }

En la respuesta se entrega un array, la primer posición entrega la data, y la segunda la metadata que contiene más información con contexto acerca del query.

Estoy estancado con este error, alguien tiene alguna idea de que puede ser? Gracias de antemano.

parent: Error: getaddrinfo ENOTFOUND undefined
at GetAddrInfoReqWrap.onlookup [as oncomplete] (node:dns:71:26) {
errno: -3007,
code: ‘ENOTFOUND’,
syscall: ‘getaddrinfo’,
hostname: ‘undefined

Si quieren buscar la documentación de algún paquete solamente hagan el comando

npm docs <paquete>

Documentación de Sequelize

Comparto los métodos crear, actualizar, y borrar con sequelize.

Soy yo o los últimos 10s del vídeo no se escuchan?

No recordaba que se podía desestructurar un array! Así como se hace con los objetos

const [data, metadata] = await sequelize.query(query);

Si no queremos que la función query que se ejecuta con sequelize retorne la meta data, podemos mandarle en un segundo parámetro un objeto con la siguiente configuración

{ type: QueryTypes.SELECT }  

Para que esto funcione debemos importar QueryTypes de la Liberia sequelize.

Quedaría algo así:

const { QueryTypes  } = require('sequelize'); 
const sequelize = require('../libs/sequelize.js');

class ProductsService {
  constructor() {
      this.products = [];
      this.generate();
  }
  async find() {
     const query = 'SELECT * FROM Tasks';
     const [data] = await sequelize.query(query, {
		type: QueryTypes.SELECT.
      });
      return this.products;
  }

/* .... Más métodos */
}

Espero este aporte les sea de utilidad.
Saludos y #NuncaParenDeAprender ??

(node:7795) [SEQUELIZE0002] DeprecationWarning: The logging-option should be either a function or false. Default: console.log
(Use `node --trace-deprecation ...` to show where the warning was created)

Lo que nos está diciendo es que el loging-option debe tener una función o un false, y ahí mismo nos está sugiriendo usar la función console.log por lo cual podemos cambiar esa opción por

  logging: console.log

muero por llenar de datos la bd