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
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
posteriormente, luego en el archivo src/config/index.ts
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'));
}
}