Aprende a usar Sequelize ORM para Node.js

Manipula mejor tus bases de datos y agiliza tu desarrollo

@Mathias Gili
Nowports Tech and Product
6 min readSep 19, 2022

--

Sequelize ORM

Debido a que la gestión de bases de datos es una tarea común en las tareas de backend, es necesario contar con herramientas que faciliten la interacción. Por eso hoy te digo cómo conseguirlo utilizando Sequelize ORM.

¿Qué es Sequelize?

Sequelize es un Object Relational Mapper (ORM) desarrollado en Node.js que simplifica el trabajo con bases de datos como PostgreSQL, MySQL y más.

Es un popular proyecto open source que se caracteriza por:

  • Manejar registros de bases de datos al representarlos como objetos.
  • Contar con poder de migración.
  • Transformar esquemas de bases de datos existentes en nuevas versiones.
  • Brindar soporte para la sincronización de bases de datos, carga rápida, asociaciones, transacciones y migraciones de bases de datos, a la vez que reduce el tiempo de desarrollo y evita las inyecciones de SQL.

¿Cuáles son los beneficios de usar Sequelize?

  • Provee muchos métodos útiles que ahorran tiempo.
  • El código está en JavaScript, evita escribir complejas consultas SQL.
  • Tiene una API robusta para construir modelos, consultar o mutar datos.
  • Cuenta con seguridad integrada, prevé ataques de inyección SQL.
  • Cuenta con una comunidad activa.
  • Integra la herramienta CLI que permite configurar el proyecto y realizar migraciones.

Y para que lo pongas en práctica, a continuación te explico cómo ejecutar algunas de sus funcionalidades para las apliques a tus proyectos y le saques ventaja. Antes de comenzar, primero asegúrate de tener:

Pre-requisitos

  • Conocimientos en JavaScript: Arrays, variables y Objects
  • Conocimientos en SQL
  • Node.js instalado
  • Visual Studio Code o cualquier editor de texto instalado

Una vez listo lo anterior, ahora si ¡comencemos!🙌

Ejemplos de funciones en Sequelize ORM

1.Construir un nuevo proyecto

  • Crea una carpeta y accede a ella por terminal.
mkdir hello-world
cd hello-world
  • Crea una aplicación Node.js.
npm init
  • Presiona ENTER para crear un proyecto por defecto.
  • Crea un server.js archivo vacío dentro de la carpeta del proyecto.
touch server.js
  • Instala Sequelize.
npm i sequelize
  • Crea una base de datos de muestra con MySQL.
mysql -u your_username -p
  • Escribe tu contraseña de MySQL y presiona ENTER.
  • Crea una base de datos llamada hello_world_db y desconéctate.
CREATE DATABASE hello_world_db;mysql> QUIT
  • Navega al directorio del proyecto usando la terminal e instala el controlador MySQL en el proyecto.
npm install — save mysql2
  • Realiza la conexión a la base de datos MySQL desde Node.js.
nano server.js
  • Reemplaza DATABASE_USERNAME y DATABASE_PASSWORD con las credenciales de tu usuario MySQL en el archivo server.js.
Crear proyecto en Sequelize ORM
  • Instala Express (infraestructura de aplicaciones web Node.js mínima y flexible que proporciona un conjunto sólido de características para apps web y móviles) y agrega estas líneas de código al archivo server.js:
Código en Sequelize ORM
  • Agrega este código si quieres verificar la conexión con la base de datos:
Código de conexión de base de datos
  • Por último, para correr el servidor con conexión a la base de datos, ejecuta:
npm start

2. Agregar modelo

Para lograr un vínculo entre objetos y tablas es necesario definir modelos. Estos transforman las tablas y columnas dentro de una base de datos y para establecerlos debes seguir estos pasos:

  • Agrega el siguiente código al archivo server.js:
Modelo de usuario en Sequelize

Esto se verá reflejado en una tabla como esta:

Tabla en Sequelize

Ahora, en la tabla User asigna un ‘id’ único y auto incremental.

Y para que comprendas mejor este tema, te dejo estos conceptos importantes que debes conocer:

Tipos de datos básicos

  • DataTypes.STRING
  • DataTypes.BOOLEAN
  • DataTypes.INTEGER
  • DataTypes.FLOAT
  • DataTypes.DATE

Qualifiers

Son aspectos que los atributos pueden necesitar, por ejemplo:

  • primaryKey (booleano que indica si es una llave primaria).
  • defaultValue (indica si tiene un valor por defecto).
  • allowNull (indica si permite valores nulos).
Ejemplo de modelo de usuario en Sequelize

Validadores

Son comprobaciones realizadas en el nivel Sequelize, en JavaScript puro.

Pueden ser arbitrariamente complejos si proporcionan una función de validación personalizada o uno de los validadores integrados que ofrece Sequelize, y en caso de que falle una validación, no se envía ninguna consulta SQL a la base de datos. Aquí algunos ejemplos:

Ejemplos de validadores

Hooks

Estas funciones se llaman antes y después de que se ejecutan las llamadas en Sequelize y también se conocen como eventos del ciclo de vida. Estos son algunos ejemplos:

  • beforeValidate(instance, options)
  • afterValidate(instance, options)
  • beforeCreate(instance, options)
  • beforeDestroy(instance, options)
  • beforeUpdate(instance, options)
  • beforeSave(instance, options)
  • afterCreate(instance, options)
  • afterDestroy(instance, options)
  • afterUpdate(instance, options)
  • afterSave(instance, options)
Ejemplos de hooks

3. Realizar operaciones CRUD

Debido a que Sequelize se basa en promesas por defecto, debes saber que una promesa en JavaScript representa la finalización eventual de una función asincrónica y su valor resultante. Para

  • Agrega un usuario.
Agregar usuario en Sequelize
Tabla de usuarios
  • Modifica un usuario.
Modificar usuario en Sequelize
Ejemplo de tabla de usuario en Sequelize
  • Igual puedes modificarlo de esta forma:
Ejemplo para modificar usuario en Sequelize
Tabla de usuario en Sequelize
  • También tienes la posibilidad de eliminarlo, justo como se muestra:
Eliminar usuario en Sequelize

4. Ejecutar asociaciones de modelos

Son relaciones existentes entre las entidades.

Sequelize admite las estándar: One-To-One, One-To-Many y Many-to-Many. Y proporciona 4 tipos de asociaciones que deben combinarse para crearlas:

  1. A.hasOne(B): significa que existe una relación uno a uno entre A y B, con la clave externa definida en el modelo de destino (B).
  2. A.belongsTo(B): se refiere a que existe una relación uno a uno entre A y B, con la clave externa definida en el modelo fuente (A).
  3. A.hasMany(B): quiere decir que existe una relación de uno a muchos entre A y B, con la clave externa definida en el modelo de destino (B).

Estas 3 llamadas harán que Sequelize agregue automáticamente claves foráneas a los modelos apropiados (a menos que ya estén presentes).

4. A.belongsToMany(B, { through: ‘C’ }) asociación: significa que existe una relación Many-To-Many entre A y B, usando la tabla C de unión y que tendrá las claves foráneas. Sequelize creará automáticamente este modelo C (a menos que ya exista) y definirá las claves externas apropiadas en él.

¡Gestiona fácil tus bases de datos!

Ahora que conoces las posibilidades de Sequelize, aprovéchalas para tus proyectos y optimiza tu tiempo al trabajar con bases de datos. Gracias a los ORM hoy tienes a tu alcance otras de formas de interactuar con tus datos.

¿Quieres leer más temas relacionados? 👉Visita el blog de Nowports Tech👈

--

--