Proyecto de ejemplo que implementa una API REST con arquitectura MVC (Modelo-Vista-Controlador) utilizando Node.js, Express y MongoDB con Mongoose.
Este proyecto demuestra cómo estructurar una aplicación Express siguiendo el patrón de arquitectura MVC, implementando un CRUD completo para la gestión de cursos.
El proyecto está organizado siguiendo el patrón MVC:
├── app.js # Punto de entrada de la aplicación
├── config/
│ ├── db.config.js # Configuración de MongoDB/Mongoose
│ └── routes.config.js # Definición de rutas (Router)
├── controllers/
│ └── course.controller.js # Controladores (lógica de negocio)
├── models/
│ └── course.model.js # Modelos (esquemas de datos)
└── package.json
-
Model (Modelo): Define la estructura de datos usando Mongoose. Incluye validaciones y esquemas.
models/course.model.js
-
View (Vista): En este caso, la API REST retorna JSON (no hay vistas HTML tradicionales).
-
Controller (Controlador): Gestiona la lógica de negocio y coordina entre modelos y las respuestas.
controllers/course.controller.js
-
Routes (Rutas): Define los endpoints y los conecta con los controladores.
config/routes.config.js
- Node.js (v18 o superior)
- MongoDB (instalado localmente o acceso a una instancia remota)
- Clonar el repositorio
git clone <url-del-repositorio>
cd crud-express- Instalar dependencias
npm install-
Configurar MongoDB
- Asegúrate de que MongoDB esté ejecutándose en
mongodb://127.0.0.1:27017 - O modifica la conexión en
config/db.config.js
- Asegúrate de que MongoDB esté ejecutándose en
-
Iniciar el servidor
npm run devEl servidor estará disponible en http://localhost:3000
| Método | Endpoint | Descripción |
|---|---|---|
| POST | /api/courses |
Crear un nuevo curso |
| GET | /api/courses |
Obtener todos los cursos |
| GET | /api/courses/:id |
Obtener un curso por ID |
| PATCH | /api/courses/:id |
Actualizar un curso |
| DELETE | /api/courses/:id |
Eliminar un curso |
Crear un curso (POST /api/courses)
{
"name": "Introducción a JavaScript",
"duration": "40 horas",
"instructor": "María García",
"price": 299.99,
"level": "beginner",
"description": "Curso completo de JavaScript desde cero"
}Actualizar un curso (PATCH /api/courses/:id)
{
"price": 249.99,
"level": "intermediate"
}{
name: String, // Requerido, 3-100 caracteres
duration: String, // Opcional, máx 50 caracteres
instructor: String, // Opcional, máx 100 caracteres
price: Number, // Opcional, debe ser positivo
level: String, // Opcional: "beginner", "intermediate", "advanced"
description: String, // Opcional, máx 500 caracteres
createdAt: Date, // Auto-generado
updatedAt: Date // Auto-generado
}El proyecto incluye una colección de Postman lista para usar:
- Importar
Courses_CRUD.postman_collection.jsonen Postman - La colección incluye todos los endpoints configurados
- Ejemplos de payloads para cada operación
- Express 5.2.1: Framework web minimalista
- Mongoose 9.2.0: ODM para MongoDB
- Joi 18.0.2: Librería de validación de esquemas
- Morgan 1.10.1: Logger HTTP para desarrollo
✅ Arquitectura MVC bien definida
✅ Validación de datos con Mongoose Schema
✅ Operaciones CRUD completas
✅ Timestamps automáticos (createdAt, updatedAt)
✅ Manejo de errores básico
✅ Hot reload en desarrollo con --watch
✅ Logging de peticiones HTTP
- Cliente → Hace una petición HTTP (ej:
POST /api/courses) - Router (
routes.config.js) → Enruta la petición al controlador correspondiente - Controller (
course.controller.js) → Procesa la lógica de negocio - Model (
course.model.js) → Interactúa con la base de datos MongoDB - Response → El controlador devuelve la respuesta en formato JSON
Cliente → Router → Controller → Model → MongoDB
↓
JSON Response ←──────┘
npm run dev: Inicia el servidor en modo desarrollo con hot reload
- Fork el proyecto
- Crea una rama para tu feature (
git checkout -b feature/nueva-funcionalidad) - Commit tus cambios (
git commit -m 'Añade nueva funcionalidad') - Push a la rama (
git push origin feature/nueva-funcionalidad) - Abre un Pull Request
ISC