Skip to content

Creación de Modelos

Los modelos hacen referencia a las tablas del diseño de su base de datos. Para este caso asumimos el siguiente diseño.

Antes de crear los modelos de la aplicación es necesario que configuremos nuestra base de datos.

Especificación de la base de datos

Esto nos indica que procedemos a varios procesos.

  • Instalar el motor de la base de datos que para este caso es MySql.

    https://docs.microsoft.com/en-us/windows/wsl/tutorials/wsl-database

  • Una vez instalado el motor debemos iniciar dicho motor.

    Abrimos la terminal de Ubuntu WSL y escribimos.

    sudo /etc/init.d/mysql start

    Si aparece este mensaje, quiere decir que ya esta inicializado.

    * Starting MySQL database server mysqld

Crear la base de datos indicada: 'NAME': 'almacen2022_mysql_nodejs', para ello, en la terminal de Ubuntu WSL ingresar

sudo mysql -u root -p

Y luego la contraseña.

Si aparece en la terminal

mysql> Indica que ya entró al motor de MySQL.

Luego realice:

show databases; Para mostrar las bases de datos que tiene creadas

create database almacen2022_mysql_nodejs;

Debe aparecer en pantalla, para indicar que ha sido creada.

Query OK, 1 row affected (0.01 sec)

Una vez creada la base de datos físicamente y haber levantado el servidor, procedemos a los modelos

Crear archivo src/database/db.ts

const Sequelize = require('sequelize');

const DB_NAME = 'almacen2022_mysql_nodejs';

const DB_USER = 'root';

const DB_PASS = 'MiNiCo57**';



export const database = new Sequelize(
    DB_NAME,
    DB_USER,
    DB_PASS,

    {
        host: 'localhost',
        dialect: 'mysql',
        port: 3306
    }

);


async function generateDb() {
    await database.sync({ force: true })
    console.log('Base de datos y tablas creada');
}

generateDb();

Instalación paquetes

npm i sequelize mysql2 @types/sequelize

Seguidamente, se procede a crear los modelos.

Nota: Se recomienda iniciar por aquellos modelos que no tengan llaves foráneas.

Modelo Cliente

Crear el archivo con el nombre del Modelo en src/models/Cliente.ts

import { Model, DataTypes } from "sequelize";
import { database } from "../database/db";

export class Cliente extends Model {
  public nombreCliente!: string;
  public direccionCliente!: string;
  public telefonoCliente!: string;
  public correoCliente!: string;
  public passwordCliente!: string;

}

export interface ClienteI {
    nombreCliente: string;
    direccionCliente: string;
    telefonoCliente: string;
    correoCliente: string;
    passwordCliente: string;
}

Cliente.init(
  {
    nombreCliente: {
        type: DataTypes.STRING,
        allowNull: false
      },
    direccionCliente: {
        type: DataTypes.STRING,
        allowNull: false
      },
    telefonoCliente: {
        type: DataTypes.STRING,
        allowNull: false,
        unique: true
      },
    correoCliente: {
        type: DataTypes.STRING,
        allowNull: false
      },
    passwordCliente: {
        type: DataTypes.STRING,
        allowNull: false
      } 
  },
  {
    tableName: "clientes",
    sequelize: database,
    timestamps: true
  }
);

Enlace para conocer los tipos de datos de Sequelize

https://sequelize.org/docs/v7/other-topics/other-data-types/

Controlador Cliente

Crear el archivo src/controllers/cliente.controller.ts

import {  Request, Response } from 'express';
import { where } from 'sequelize/types';

import { Cliente, ClienteI } from '../models/Cliente';

export class ClienteController {


    public async test(req: Request, res:Response){
        try {
            res.send('hola, metodo test para Cliente')
        } catch (error) {

        }
    }

    public async getAllCliente(req: Request, res:Response){
        try {
            const cliente: ClienteI[] = await Cliente.findAll(
                {
                    where: {activo: true}
                }
            ) // select * from clientes;
            res.status(200).json({cliente})
        } catch (error) {

        }
    }
}

Rutas de Cliente

Crear el archivo src/routes/cliente.ts

import { Request, Response, Application, Router } from "express";

import { ClienteController } from '../controllers/cliente.controller';

export class ClienteRoutes {
    public clienteController: ClienteController =  new ClienteController();

    public routes(app: Application): void {
        app.route("/clientes/test").get(this.clienteController.test)
        app.route("/clientes").get(this.clienteController.getAllCliente)
    }
}

Luego indexamos esta rutas en

En caso que no exista, crear el archivo src/routes/index.ts

import { ClienteRoutes } from './cliente';

export class Routes {
    public clienteRoutes: ClienteRoutes = new ClienteRoutes();
}

Definir Cliente en Config

Primeramente debemos instalar el paquete de Cors para que pueda hacer peticiones desde el cliente

npm i cors

posteriormente, luego en el archivo src/config/index.ts

import { Routes } from "../routes/index";
public routePrv: Routes = new Routes();
this.routes();
private routes() {
        this.routePrv.clienteRoutes.routes(this.app);
    }

dicho archivo queda finalmente de esta manera:

import express, { Application } from 'express';
import morgan from 'morgan';
import { Routes } from '../routes/index';   
var cors = require("cors"); // install en node y types

export class App {
    public routePrv: Routes =  new Routes();
    app: Application;

    constructor(
        private port?: number | string
    ) {
        this.app = express();
        this.settings();
        this.middlewares();
        this.routes()
    }

    private settings() {
        this.app.set('port', this.port || process.env.PORT || 3000);
    }

    private middlewares() {
        this.app.use(morgan('dev'));
        this.app.use(express.json()); // leer json raw
        this.app.use(express.urlencoded({ extended: false })); //leer json form
    }

    routes() {
        this.routePrv.clienteRoutes.routes(this.app)
    }


   async listen() {
        await this.app.listen(this.app.get('port'));
        // await this.app.listen(this.port);
        // console.log('Server on port', this.port);
        console.log('Server on port', this.app.get('port'));
    }

}