DAWM

Regresar

Express - ORM (Básico)

Sequelize es un ORM para Nodejs que te permite agilizar el desarrollo de aplicaciones que incluyen la conexión con bases de datos relacionales como Postgres, MySQL, MariaDB, SQLite y SQL Server.

Software a utilizar


De MySQL Community Downloads, descargue e instale:

Proyecto en Express


Crea un nuevo proyecto, según Express - Bases.

Nodemon

ORM: Sequelize


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


{
  "development": {
    "username": "root",
    "password": "root",
    "database": "album",
    "host": "127.0.0.1",
    "dialect": "mysql"
  },
  ...

MySQL


Modelo


El modelo es una representación abstracta, mediante clases (atributos y métodos), de las entidades de la base de datos relacional.

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

Migraciones


Las migraciones contienen un registro histórico de los cambios realizados en los modelos y/o entidades.

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

Generadores (Seeders)


A veces, es necesario generar datos de manera automática.

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


...  
async up (queryInterface, Sequelize) {
  
  for (let i = 0; i <10; i++) {  
      await queryInterface.bulkInsert('fotos', [{  
          titulo: 'fotos'+i,  
          descripcion: 'Lorem ipsum dolor sit amet, consectetur adipiscing elit.',
          calificacion: (Math.random()*10).toFixed(2),  
          ruta: 'public/images/'+'fotos'+i+'.png',
          createdAt: new Date(),  
          updatedAt: new Date()  
      }], {});  
   } 
    
},  
...

...  
async down (queryInterface, Sequelize) {
  
  await queryInterface.bulkDelete('fotos', null, {});  
  
},  
...

Manejador de rutas y controladores


Para solicitar los datos desde la base de datos, será necesario que:



var express = require('express');
var router = express.Router();



module.exports = router;


var express = require('express');  
var router = express.Router();  
  

const Sequelize = require('sequelize');
const Foto = require('../models').foto;  
  

module.exports = router;

...
const Foto = require('../models').foto;


router.get('/findAll/json', function(req, res, next) {  

	
  Foto.findAll({  
      attributes: { exclude: ["updatedAt"] }  
  })  
  .then(fotos => {  
      res.json(fotos);  
  })  
  .catch(error => res.status(400).send(error)) 

});


module.exports = router;

...


router.get('/findAll/view', function(req, res, next) {  

  
  Foto.findAll({  
      attributes: { exclude: ["updatedAt"] }  
  })  
  .then(fotos => {  
      res.render('fotos', { title: 'Fotos', arrFotos: fotos });  
  })  
  .catch(error => res.status(400).send(error)) 

});


module.exports = router;

Vista


<!DOCTYPE html>
<html>
  <head>
    <title><%= title %></title>
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.2.3/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-rbsA2VBKQhggwzxH7pPCaAqO46MgnOM80zW1RWuH61DGLwZJEdK2Kadq2F9CUG65" crossorigin="anonymous">
  </head>
  <body>
      
    ...

    <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.2.3/dist/js/bootstrap.bundle.min.js" integrity="sha384-kenU1KFdBIe4zVF0s0G1M5b4hcpxyD9F7jL+jjXkk+Q2h455rYXK/7HAuoJl+0I4" crossorigin="anonymous"></script>
    <script src="https://cdn.jsdelivr.net/npm/feather-icons@4.28.0/dist/feather.min.js" integrity="sha384-uO3SXW5IuS1ZpFPKugNNWqTZRRglnUJK6UAZ/gxOX80nxEkN9NcGZTftn6RzhGWE" crossorigin="anonymous"></script>
    <script src="https://cdn.jsdelivr.net/npm/chart.js@2.9.4/dist/Chart.min.js" integrity="sha384-zNy6FEbO50N+Cg5wap8IKA4M/ZnLJgzc6w2NqACZaK0u0FXfOWRRJOnQtpZun8ha" crossorigin="anonymous"></script>

  </body>
</html>
...  
  
<div class="container-fluid p-4">

  <h1 class="pb-4"><%= title %></h1>

  <table class="table table-striped table-hover">
    <thead>
      <tr>
        <th>Id</th>
        <th>Título</th>
        <th>Descripción</th>
        <th>Ruta</th>
        <th>Fecha de creación</th>
      </tr>
    </thead>
    <tbody>
      <% arrFotos.forEach((foto) => { %>
      <tr>
        <td><%= foto.id %></td>
        <td><%= foto.titulo %></td>
        <td><%= foto.descripcion %></td>
        <td><%= foto.ruta %></td>
        <td><%= foto.createdAt.toLocaleDateString('en-US') %></td>
      </tr>
      <% }); %>
    </tbody>
  </table>

</div> 
  
...

Aplicación



...
var fotosRouter = require('./routes/fotos');
...

...
app.use('/fotos', fotosRouter);
...

Comprobación


Referencias