n-¿Cómo ejecuta Express la función guardada-n
¿Cómo ejecuta Express la función guardada?
Express automáticamente la ejecuta cuando ocurre el evento (cuando alguien visita la URL).
El ciclo completo:
javascript
// 1. TÚ: Guardas la función (sin ejecutar)
app.get('/', controller.mostrarIndex);
// Express internamente guarda en su memoria:
// "Cuando alguien haga GET a '/' → ejecutar controller.mostrarIndex"
// 2. EXPRESS: Escucha peticiones HTTP
// El servidor está corriendo, esperando...
// 3. USUARIO: Escribe en el navegador: http://localhost:3000/
// El navegador envía una petición GET a tu servidor
// 4. EXPRESS: Detecta la petición y EJECUTA tu función
// Internamente Express hace algo como:
if (peticion.url === '/' && peticion.method === 'GET') {
// ¡Aquí es donde ejecuta tu función guardada!
controller.mostrarIndex(peticion, respuesta);
}
Ejemplo visual paso a paso en código
javascript
// Simulación de cómo funciona Express internamente
// 1. Express guarda las rutas en un arreglo
const rutasGuardadas = [];
// 2. Cuando usas app.get(), Express guarda la información
app.get = (url, funcion) => {
rutasGuardadas.push({
url: url,
metodo: 'GET',
funcion: funcion // ← Guarda la función (sin ejecutar)
});
};
// 3. TÚ guardas tu ruta
app.get('/', controller.mostrarIndex);
// Ahora rutasGuardadas tiene: [{ url: '/', metodo: 'GET', funcion: mostrarIndex }]
// 4. Cuando el servidor recibe una petición
function recibirPeticion(req, res) {
// Buscar si hay una ruta guardada que coincida
const ruta = rutasGuardadas.find(r =>
r.url === req.url && r.metodo === req.method
);
if (ruta) {
// ¡EJECUTA la función guardada!
ruta.funcion(req, res); // ← Aquí es donde se ejecuta
}
}
Prueba en REPL para que lo veas funcionar
bash
node
javascript
// Simular Express simple
const rutas = {};
// Simular app.get (guardar funciones)
function get(url, funcion) {
rutas[url] = funcion;
console.log(`📦 Ruta ${url} guardada. Función guardada, aún no ejecutada`);
}
// Simular servidor que recibe peticiones
function recibirPeticion(url) {
console.log(`\n🌐 Llegó petición a: ${url}`);
const funcionGuardada = rutas[url];
if (funcionGuardada) {
console.log(`✅ Ruta encontrada. Ejecutando función guardada...`);
// ¡Aquí es donde se ejecuta después!
funcionGuardada(`req de ${url}`, `res para ${url}`);
} else {
console.log(`❌ No existe ruta para: ${url}`);
}
}
// ===== TU CONTROLADOR =====
const controller = {
mostrarIndex: (req, res) => {
console.log(`🔥 EJECUTANDO mostrarIndex`);
console.log(` Request: ${req}`);
console.log(` Response: ${res}`);
console.log(` Devolviendo página de productos...`);
}
};
// ===== TÚ GUARDAS LA RUTA (sin ejecutar) =====
console.log('=== CONFIGURANDO RUTAS ===');
get('/', controller.mostrarIndex);
// No se ejecuta controller.mostrarIndex todavía
console.log('\n=== SERVIDOR LISTO, ESPERANDO... ===');
// ===== EL USUARIO VISITA LA PÁGINA =====
console.log('\n=== USUARIO NAVEGA ===');
recibirPeticion('/');
recibirPeticion('/otra-ruta');
Salida:
text
=== CONFIGURANDO RUTAS ===
📦 Ruta / guardada. Función guardada, aún no ejecutada
=== SERVIDOR LISTO, ESPERANDO... ===
=== USUARIO NAVEGA ===
🌐 Llegó petición a: /
✅ Ruta encontrada. Ejecutando función guardada...
🔥 EJECUTANDO mostrarIndex
Request: req de /
Response: res para /
Devolviendo página de productos...
🌐 Llegó petición a: /otra-ruta
❌ No existe ruta para: /otra-ruta
¿Y si QUIERES ejecutarla tú manualmente?
También puedes hacerlo:
javascript
// Guardaste la función
app.get('/', controller.mostrarIndex);
// TÚ quieres ejecutarla ahora (no esperar al usuario)
const reqSimulada = { url: '/', method: 'GET' };
const resSimulada = { send: (msg) => console.log(msg) };
// Ejecutar manualmente
controller.mostrarIndex(reqSimulada, resSimulada);
// 💥 Se ejecuta AHORA, no espera al usuario
La diferencia clave:
Analogía con el botón (para conectar):
javascript
// === BOTÓN (ya lo entendiste) ===
btn.addEventListener('click', saludar);
// La función se guarda y se ejecuta CUANDO HACES CLICK
// === EXPRESS (exactamente igual) ===
app.get('/', controller.mostrarIndex);
// La función se guarda y se ejecuta CUANDO VISITAN /
// === SI QUIERES EJECUTARLA AHORA (tú decides) ===
saludar(); // Ejecuta ahora
controller.mostrarIndex(req, res); // Ejecuta ahora
Resumen visual:
text
TU CÓDIGO:
app.get('/', controller.mostrarIndex);
↓
[📦 función guardada]
↓
EXPRESS INTERNAMENTE:
"Tengo una función guardada para cuando llegue GET /"
↓
USUARIO ESCRIBE URL:
http://localhost:3000/
↓
EXPRESS DETECTA LA PETICIÓN:
"¡Alguien visitó / !"
↓
EXPRESS EJECUTA:
controller.mostrarIndex(req, res)
↓
💥 ¡TU FUNCIÓN SE EJECUTA! (en ese momento)
En resumen: No ejecutas la función tú. Express la ejecuta automáticamente cuando ocurre el evento (la petición HTTP). Tú solo le dices a Express: "aquí tienes la función, ejecútala cuando alguien visite esta URL".
¿Ahora sí queda claro el "para después"?
Comentarios
Publicar un comentario