Está en la página 1de 8

31/1/22 11:47 NodeJS - Express - ORM - Intermedio: DESARROLLO DE APLICACIONES WEB Y MÓVILES

NodeJS - Express - ORM - Intermedio

Es un ORM (https://www2.deloitte.com/es/es/pages/technology/articles/que-es-orm.html)
para Nodejs que te permitirá agilizar bastante tus desarrollos que incluyan bases de
datos relacionales como Postgres, MySQL, MariaDB, SQLite y SQL Server.

Recursos

Crea un proyecto básico, siguiendo las instrucciones de NodeJS - Express


(https://aulavirtual.espol.edu.ec/courses/3423/pages/nodejs-express) , NodeJS - Express -
Bootstrap (https://aulavirtual.espol.edu.ec/courses/3423/pages/nodejs-express-bootstrap)
, NodeJS - Express - Forms (https://aulavirtual.espol.edu.ec/courses/3423/pages/nodejs-
express-forms) , NodeJS - Express - Partials
(https://aulavirtual.espol.edu.ec/courses/3423/pages/nodejs-express-partials) y NodeJS -
Express - ORM - Básico (https://aulavirtual.espol.edu.ec/courses/3423/pages/nodejs-
express-orm-basico) .

Otra alternativa es que utilices el proyecto plantilla. Desde la línea de comandos:

Clona el proyecto, con: git clone https://github.com/DAWFIEC/sitioExpress.git


Accede a la carpeta del proyecto: cd sitioExpress
Cámbiate a la rama: git checkout express-orm
Instala los módulos: npm install
Ejecuta los comandos para restablecer la base de datos
Modifique las credenciales de conexión en config/config.json
Para crear la base de datos, con: sequelize db:create
Crear las entidades, con: sequelize db:migrate
Rellenar la base de datos, con: sequelize db:seed:all
Verifica que funcione correctamente al levantar los servicios: npm run devstart
Desde el navegador, accede a http://localhost:3000/ (http://localhost:3000/)
A productos con http://localhost:3000/productos/
(http://localhost:3000/productos/)
A clientes  con http://localhost:3000/clientes/ (http://localhost:3000/clientes/)

https://aulavirtual.espol.edu.ec/courses/3423/pages/nodejs-express-orm-intermedio?module_item_id=138385 1/8
31/1/22 11:47 NodeJS - Express - ORM - Intermedio: DESARROLLO DE APLICACIONES WEB Y MÓVILES

Modelos

Mediante la línea de comandos en la raíz de la carpeta del proyecto. 


Crea los modelos: orden y orden_detalle, com:
sequelize model:create --name orden --attributes fecha:date,clienteId:integer
sequelize model:create --name orden_detalle --attributes
ordenId:integer,productoId:integer
 

Estrategias de nombres

Sequelize crea las tablas a partir del plural (en inglés) del modelo. Para utilizar un nombre
de tabla específico será necesario establecer el nombre en el modelo y en la migración:
 
Modifique el modelo de models/orden.js, agregue el nombre de la futura tabla:
ordenes 

...

}, {

sequelize,

modelName: 'orden',

tableName: "ordenes"

});

...

Modifique la migración de migrations/XXXXYYYYZZZZZZ-create-orden.js, con el


nombre de la futura tabla: ordenes

...

up: async (queryInterface, Sequelize) => {

await queryInterface.createTable('ordenes', {

id: {

...

down: async (queryInterface, Sequelize) => {

await queryInterface.dropTable('ordenes');

...

https://aulavirtual.espol.edu.ec/courses/3423/pages/nodejs-express-orm-intermedio?module_item_id=138385 2/8
31/1/22 11:47 NodeJS - Express - ORM - Intermedio: DESARROLLO DE APLICACIONES WEB Y MÓVILES

Asociaciones a nivel físico (tablas en la BD)

Las asociaciones de claves foráneas se realizan en las migraciones de las tablas:


migrations/xxxxyyyyxxxxyyyyzz-create-orden.js

...

clienteId: {

        type: Sequelize.INTEGER,

        allowNull: false,

      references: {

               model: 'clientes',

               key: 'id'

        }

},

...

migrations/xxxxyyyyxxxxyyyyzz-create-orden_detalle.js

...

ordenId: {

type: Sequelize.INTEGER,

allowNull: false,

references: {

model: 'ordenes',

key: 'id'

},

productoId: {

type: Sequelize.INTEGER,

allowNull: false,

references: {

model: 'productos',

key: 'id'

},

...

https://aulavirtual.espol.edu.ec/courses/3423/pages/nodejs-express-orm-intermedio?module_item_id=138385 3/8
31/1/22 11:47 NodeJS - Express - ORM - Intermedio: DESARROLLO DE APLICACIONES WEB Y MÓVILES

Migraciones

Cuando se realizan cambios a nivel físico, es necesario revertir y aplicar todas las
migraciones. Desde la línea de comandos del proyecto:
Revierta todas las migraciones anteriores, con: sequelize db:migrate:undo:all
Aplique nuevamente todas las migraciones, con: sequelize db:migrate
Revise los cambios en la base de datos.
 

[Opcional] Modelo ER

MySQL Workbench nos ofrece una opción para visualizar las entidades y sus relaciones
(How to reverse engineer a database with MySQL Workbench - MySQL Workbench
Tutorials., 2021).

Desde MySQL Workbench, seleccione Database > Reverse Engineer,


Escoja la base de datos misitio, y
Seleccione las entidades productos, ordenes, clientes y ordenes_detalles.
Obtendrá el siguiente modelo: 

https://aulavirtual.espol.edu.ec/courses/3423/pages/nodejs-express-orm-intermedio?module_item_id=138385 4/8
31/1/22 11:47 NodeJS - Express - ORM - Intermedio: DESARROLLO DE APLICACIONES WEB Y MÓVILES

Generadores de datos

Para generar datos en entidades con claves foráneas será necesario crear y ejecutar los
seeders. (associations, S., Elazazy, A., & Manuilov, E., 2018). Desde la línea de comandos
del proyecto:
Cree los archivos de los generadores, con:
sequelize seed:generate --name ordenes
sequelize seed:generate --name orden_detalles
Copie el contenido de seeders.rar
(https://aulavirtual.espol.edu.ec/courses/3423/files/1410082/download?wrap=1) en los
archivos correspondientes:
ordenes.js en seeders/xxxxyyyyxxxxyyyyzz-ordenes.js 
orden_detalles.js en seeders/xxxxyyyyxxxxyyyyzz-orden_detalles.js
Ejecute los generadores automáticos de datos, con: sequelize db:seed:all
Verifique los resultados en la base de datos.
 

Órdenes (Orders)

En el archivo routes/index.js agrega la ruta "/ordenes" en la que se muestre las órdenes


disponibles. Agrega la ruta "/ordenes" bajo el enlace Orders, en el navbar. Toma como
referencia la página NodeJS - Express - ORM - Básico
(https://aulavirtual.espol.edu.ec/courses/3423/pages/nodejs-express-orm-basico) .

El resultado debería lucir algo similar a:

https://aulavirtual.espol.edu.ec/courses/3423/pages/nodejs-express-orm-intermedio?module_item_id=138385 5/8
31/1/22 11:47 NodeJS - Express - ORM - Intermedio: DESARROLLO DE APLICACIONES WEB Y MÓVILES

Asociaciones a nivel lógico (clases)

Para manipular los datos asociados mediantes las clases será necesario establecer las
relaciones entre las clases:
Agrega la relación entre clases Orden - Cliente, con: models/orden.js

...

static associate(models) {

// define association here

this.belongsTo(models.cliente)

...

Agrega el modelo de cliente al realizar el query de Ordenes, con: routes/index.js

...

Ordenes.findAll({

include: [{ model: Cliente }],

attributes: { exclude: [ "updatedAt"] }

})

.then(ordenes => {

...

Muestra los datos del cliente en la vista, con: view/partials/ordenes_tabla.js

...

<% ordenes.forEach(function(orden){ %>

<tr>

<td><%= orden.id %></td>

<td><%= orden.fecha.toLocaleDateString('en-US') %></td>

<td><%= orden.cliente.nombre + " " + orden.cliente.apellido %>


</td>

...

</tr>

<% }); %>

...

El resultado debe lucir como:


https://aulavirtual.espol.edu.ec/courses/3423/pages/nodejs-express-orm-intermedio?module_item_id=138385 6/8
31/1/22 11:47 NodeJS - Express - ORM - Intermedio: DESARROLLO DE APLICACIONES WEB Y MÓVILES

Fuentes

¿Qué es un ORM?. (2021). Retrieved 3 August 2021, from


https://www2.deloitte.com/es/es/pages/technology/articles/que-es-orm.html
(https://www2.deloitte.com/es/es/pages/technology/articles/que-es-orm.html)

Node JS, Express y MySQL con Sequelize. (2021). Retrieved 3 August 2021, from
https://tomasmalio.medium.com/node-js-express-y-mysql-con-sequelize-
ec0a7c0ae292 (https://tomasmalio.medium.com/node-js-express-y-mysql-con-sequelize-
ec0a7c0ae292)

Manual | Sequelize. (2021). Retrieved 4 August 2021,


from https://sequelize.org/master/index.html (https://sequelize.org/master/index.html)
Creating Sequelize Associations with the Sequelize CLI tool. (2020). Retrieved 3 August
2021, from https://levelup.gitconnected.com/creating-sequelize-associations-with-the-
sequelize-cli-tool-d83caa902233 (https://levelup.gitconnected.com/creating-sequelize-
associations-with-the-sequelize-cli-tool-d83caa902233)

associations, S., Elazazy, A., & Manuilov, E. (2018). Sequelize: seed with associations.
Retrieved 5 August 2021, from https://stackoverflow.com/questions/48732223/sequelize-
seed-with-associations (https://stackoverflow.com/questions/48732223/sequelize-seed-with-
associations)

How to reverse engineer a database with MySQL Workbench - MySQL Workbench Tutorials.
(2021). Retrieved 5 August 2021, from https://dataedo.com/kb/tools/mysql-
workbench/how-to-reverse-engineer-database (https://dataedo.com/kb/tools/mysql-
workbench/how-to-reverse-engineer-database)

https://aulavirtual.espol.edu.ec/courses/3423/pages/nodejs-express-orm-intermedio?module_item_id=138385 7/8
31/1/22 11:47 NodeJS - Express - ORM - Intermedio: DESARROLLO DE APLICACIONES WEB Y MÓVILES

https://aulavirtual.espol.edu.ec/courses/3423/pages/nodejs-express-orm-intermedio?module_item_id=138385 8/8

También podría gustarte