Ejemplo (2): montando un servidor Express

En este vídeo configuramos una aplicación Express que quede a la escucha en un puerto, para que cuando se haga una petición HTTP se ejecute la función que vamos a usar para manejar y devolver una respuesta.

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.

Lista de reproducción
  1. 1
    Temporada 1
    5 minutos
  2. 2
    ¿Qué es TypeScript?
    11 minutos
  3. 3
    Instalando TypeScript
    8 minutos
  4. 4
    Compilando un Hola Mundo sencillo
    7 minutos
  5. 5
    Hola Mundo pero con tipos
    10 minutos
  6. 6
    Tipos: tipos primitivos
    12 minutos
  7. 7
    Tipos: tipos especiales (any, null, ...)
    10 minutos
  8. 8
    Tipos: arrays y tuplas
    11 minutos
  9. 9
    Tipos: objetos
    7 minutos
  10. 10
    Funciones: lo básico
    9 minutos
  11. 11
    Funciones: tipando funciones
    9 minutos
  12. 12
    Clases: introducción a las clases
    9 minutos
  13. 13
    Clases: creando una clase
    10 minutos
  14. 14
    Clases: modificador private
    8 minutos
  15. 15
    Clases: modificador readonly
    3 minutos
  16. 16
    Clases: Atributos virtuales con getters y setters
    10 minutos
  17. 17
    Clases: herencia
    9 minutos
  18. 18
    Clases: modificadores abstract y protected
    8 minutos
  19. 19
    Tipos alias
    6 minutos
  20. 20
    Tipos literales
    5 minutos
  21. 21
    Uniones de tipos
    7 minutos
  22. 22
    Uniones discriminantes
    7 minutos
  23. 23
    Intersecciones de tipos
    5 minutos
  24. 24
    Interfaces: introducción
    7 minutos
  25. 25
    Interfaces: modificadores y funciones
    9 minutos
  26. 26
    Interfaces: usándolas con clases
    8 minutos
  27. 27
    Interfaces: herencia de interfaces
    8 minutos
  28. 28
    Interfaces: interfaces indizadas
    5 minutos
  29. 29
    Interfaces: funciones y tipos híbridos
    5 minutos
  30. 30
    ¿Qué diferencia hay entre interfaces y tipos? (2020)
    8 minutos
  31. 31
    Casteos con as
    6 minutos
  32. 32
    instanceof y las guardas
    9 minutos
  33. 33
    Tipos enumerados
    8 minutos
  34. 34
    Valores avanzados para enumerados
    7 minutos
  35. 35
    Enumerados con valores computados
    6 minutos
  36. 36
    Genéricos en tipos
    8 minutos
  37. 37
    Múltiples genéricos y buenas prácticas
    5 minutos
  38. 38
    Genéricos en funciones
    8 minutos
  39. 39
    Genéricos con restricciones
    6 minutos
  40. 40
    Tipos de utilidad
    3 minutos
  41. 41
    Exportando módulos
    9 minutos
  42. 42
    Importando módulos
    7 minutos
  43. 43
    Export default e import asterisco
    6 minutos
  44. 44
    tsconfig
    7 minutos
  45. 45
    Módulos desde NPM
    7 minutos
  46. 46
    Arroba types y los .d.ts
    8 minutos
  47. 47
    Ejemplo (1): creando una API REST simple en TypeScript
    11 minutos
  48. 48
    Ejemplo (2): montando un servidor Express
    8 minutos
  49. 49
    Ejemplo (3): haciendo las funciones de control de datos
    11 minutos
  50. 50
    Ejemplo (4): conectando todas las piezas
    7 minutos