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:

Situación

Código

¿Cuándo se ejecuta?

Express guarda

app.get('/', controller.mostrarIndex)

Cuando el usuario visita /

Tú ejecutas

controller.mostrarIndex(req, res)

Inmediatamente (AHORA)

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

Entradas más populares de este blog

1-valores duplicados en un arreglo

n-funcion - el botón-n

Objetos básicos en JavaScript