Implementacion del microservicio de Productos para taller de microservicios, conectado a MySQL.
Gestionar el catalogo de productos del sistema.
Funciones principales:
- Listar productos
- Consultar producto por ID
- Crear productos
Este servicio no gestiona usuarios, pedidos ni pagos.
- Backend: Node.js + Express
- Base de datos: MySQL
- Frontend: HTML, CSS, JavaScript
- Puerto sugerido:
3002
microservicio-productos
|
|-- src
| |-- controllers
| | `-- productsController.js
| |-- routes
| | `-- productsRoutes.js
| |-- models
| | |-- database.js
| | `-- initDb.js
| `-- app.js
|
|-- frontend
| |-- index.html
| |-- styles.css
| `-- script.js
|
|-- package.json
|-- .env
|-- .env.example
`-- README.md
Tabla: products
CREATE TABLE IF NOT EXISTS products (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(120) NOT NULL,
description VARCHAR(255) NOT NULL,
price DECIMAL(10,2) NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);- Metodo:
GET - Ruta:
/products
Respuesta ejemplo:
[
{
"id": 1,
"name": "Laptop",
"description": "Laptop gamer",
"price": 900,
"created_at": "2026-03-05 15:00:00"
}
]- Metodo:
GET - Ruta:
/products/:id
Respuesta ejemplo:
{
"id": 1,
"name": "Laptop",
"description": "Laptop gamer",
"price": 900,
"created_at": "2026-03-05 15:00:00"
}- Metodo:
POST - Ruta:
/products
Body ejemplo:
{
"name": "Mouse",
"description": "Mouse gamer",
"price": 50
}Respuesta ejemplo:
{
"id": 2,
"name": "Mouse",
"description": "Mouse gamer",
"price": 50
}flowchart TD
A[Cliente o Frontend] --> B[POST /products]
B --> C[Validar name, description, price]
C -->|Valido| D[Insertar en tabla products]
C -->|Invalido| E[Retornar 400 Bad Request]
D --> F[Retornar 201 con producto creado]
G[Cliente o Frontend] --> H[GET /products]
H --> I[Consultar tabla products]
I --> J[Retornar lista de productos]
K[Cliente o Frontend] --> L[GET /products/:id]
L --> M[Buscar producto por id]
M -->|Existe| N[Retornar producto]
M -->|No existe| O[Retornar 404 Not Found]
- Crear base de datos en MySQL:
CREATE DATABASE IF NOT EXISTS productos_db;- Configurar variables en
.env:
PORT=3002
DB_HOST=localhost
DB_PORT=3306
DB_USER=root
DB_PASSWORD=
DB_NAME=productos_db- Instalar dependencias:
npm.cmd install- Inicializar tabla
products(opcional, tambien se verifica al iniciar):
npm.cmd run init-db- Ejecutar servicio:
npm.cmd start- Probar:
- API:
http://localhost:3002/products - Frontend:
http://localhost:3002 - Health check:
http://localhost:3002/health
- Abrir DBeaver y crear nueva conexion
MySQL. - Usar estos parametros:
- Host:
localhost - Puerto:
3306 - Database:
productos_db - Usuario: el de tu MySQL (por ejemplo
root) - Password: la de tu MySQL
- Probar conexion y guardar.
- Abrir SQL Editor y ejecutar:
SELECT * FROM products;Crear producto:
curl -X POST http://localhost:3002/products \
-H "Content-Type: application/json" \
-d "{\"name\":\"Teclado\",\"description\":\"Teclado mecanico\",\"price\":120}"Listar productos:
curl http://localhost:3002/productsConsultar por ID:
curl http://localhost:3002/products/1