Express es una librería fundamental para quienes queremos montar servidores web de forma sencilla y minimalista. Su principal ventaja es que nos permite crear una aplicación que responde a diferentes rutas HTTP, ya sea con métodos GET, POST, DELETE, PUT, entre otros. La idea es que instalemos Express con npm install express y luego, importándola, podamos crear una aplicación con la que definamos rutas específicas que atiendan las peticiones que recibamos.
Cuando configuramos una ruta con Express, podemos indicar qué debe ocurrir cuando alguien visita una URL concreta. Por ejemplo, si alguien accede a /about, podemos devolver un mensaje o una página específica. También podemos manejar rutas más complejas, incluyendo parámetros dinámicos en la URL, lo que nos permite responder con datos personalizados según esos parámetros.
Para organizar mejor nuestro código, es recomendable no dejar toda la configuración del servidor en un único archivo. En lugar de eso, podemos crear una función constructora que se encargue de crear y devolver la instancia de la aplicación Express. Así, solo tendremos que llamar a createServer() y luego a .listen() para poner el servidor en marcha. Esto hace que el código sea más limpio y modular.
Al trabajar con TypeScript, es importante instalar también los tipos para Express con npm install --save @types/express. Esto nos ayuda a tener autocompletado y a tipar correctamente los objetos que manejamos, como la petición (req) y la respuesta (res). Por ejemplo, cuando definimos una ruta con parámetros dinámicos, podemos acceder a esos parámetros a través de req.params.
Un ejemplo práctico es crear una ruta que reciba dos parámetros en la URL, como /resultados/:equipo1/:equipo2. Cuando alguien accede a una URL que coincide con esta estructura, Express extrae los valores de equipo1 y equipo2 y los pone a nuestra disposición en req.params.equipo1 y req.params.equipo2. Así, podemos construir una respuesta personalizada, por ejemplo, mostrando un mensaje con los resultados entre esos dos equipos.
El código para montar este servidor con Express y TypeScript podría ser algo así:
import express, { Request, Response } from 'express';
export default function createServer() {
const app = express();
app.get('/resultados/:equipo1/:equipo2', (req: Request, res: Response) => {
const { equipo1, equipo2 } = req.params;
res.send(`Resultados del ${equipo1} versus ${equipo2}`);
});
return app;
}
Luego, en un archivo index.ts, simplemente importamos esta función y levantamos el servidor:
import createServer from './server';
const app = createServer();
app.listen(3000, () => {
console.log('Ya estamos escuchando en el puerto 3000');
});
Con esto, cuando hagamos una petición a http://localhost:3000/resultados/bar/bet, recibiremos la respuesta Resultados del bar versus bet.
Este enfoque nos permite construir servidores web de forma clara y organizada, aprovechando las ventajas de Express y TypeScript para manejar rutas dinámicas y tipar correctamente las peticiones y respuestas. Además, nos prepara para ampliar la funcionalidad, como conectar con bases de datos o procesar datos más complejos, manteniendo el código limpio y modular.