Express.js es el framework backend más popular para Node.js, y es una parte extensa del ecosistema JavaScript.

Está diseñado para construir aplicaciones web de una sola página, multipágina e híbridas, también se ha convertido en el estándar para desarrollar aplicaciones backend con Node.js, y es la parte backend de algo conocido como la pila MEVN.

El MEVN es un stack de software JavaScript libre y de código abierto para construir sitios y aplicaciones web dinámicas que tiene los siguientes componentes

  1. MongoDB: MongoDB es la base de datos NoSQL estándar
  2. Express.js: El framework de aplicaciones web por defecto para construir aplicaciones web
  3. Vue.js: El framework progresivo de JavaScript utilizado para construir aplicaciones web front-end
  4. Node.js: El motor de JavaScript utilizado para aplicaciones escalables del lado del servidor y de la red.

Esta guía explorará las características clave del framework Express.js y cómo construir tu primera aplicación.

¿Qué es Express.js?

Express.js, a veces también llamado «Express», es un framework de backend Node.js minimalista, rápido y similar a Sinatra, que proporciona características y herramientas robustas para desarrollar aplicaciones de backend escalables. Te ofrece el sistema de enrutamiento y características simplificadas para ampliar el framework con componentes y partes más potentes en función de los casos de uso de tu aplicación.

El logotipo de Express.js, que muestra la palabra "Express" en mayúsculas con una fuente negra fina de tipo serif.
Logotipo oficial de Express.js

El framework proporciona un conjunto de herramientas para aplicaciones web, peticiones y respuestas HTTP, enrutamiento y middleware para construir y desplegar aplicaciones a gran escala y preparadas para la empresa.

También proporciona una herramienta de interfaz de línea de comandos (CLI) llamada Node Package Manager (NPM), donde los desarrolladores pueden obtener paquetes desarrollados. También obliga a los desarrolladores a seguir el principio de No te repitas (DRY).

El principio DRY pretende reducir la repetición de patrones de software, sustituyéndolos por abstracciones, o utilizando normalizaciones de datos para evitar la redundancia.

¿Para Qué se Utiliza Express.js?

Express.js se utiliza para una amplia gama de cosas en el ecosistema JavaScript/Node.js — puedes desarrollar aplicaciones, endpoints de API, sistemas de enrutamiento y frameworks con él.

A continuación hay una lista de sólo algunos de los tipos de aplicaciones que puedes construir con Express.js.

Aplicaciones de una Sola Página

Las aplicaciones de una sola página (SPAs) son el enfoque moderno de desarrollo de aplicaciones en el que toda la aplicación se enruta en una sola página de índice. Express.js es un excelente framework para construir una API que conecte estas aplicaciones SPA y sirva datos de forma consistente. Algunos ejemplos de aplicaciones de página única son Gmail, Google Maps, Airbnb, Netflix, Pinterest, Paypal y muchos más. Las empresas están utilizando las SPA para construir una experiencia fluida y escalable.

Herramientas de Colaboración en Tiempo Real

Las herramientas de colaboración están aquí para facilitar la forma en que las empresas trabajan y colaboran diariamente, y con Express.js, puedes desarrollar aplicaciones de colaboración y de red en tiempo real con facilidad.

Además, el framework se utiliza para desarrollar aplicaciones en tiempo real, como aplicaciones de chat y de escritorios, donde resulta sencillo integrar WebSocket en el framework.

Express.js se encarga de la parte de enrutamiento y middleware del proceso, lo que permite a los desarrolladores concentrarse en la lógica empresarial vital de estas funciones en tiempo real al desarrollar herramientas de colaboración en directo.

Aplicaciones de Streaming

Las aplicaciones de streaming en tiempo real como Netflix son complejas y tienen muchas capas de flujos de datos. Para desarrollar una aplicación de este tipo, necesitas un framework sólido que maneje eficazmente los flujos de datos asíncronos.

Es un framework ideal para construir y desplegar aplicaciones de streaming escalables y preparadas para la empresa.

Aplicaciones Fintech

Fintech es un programa informático y otras tecnologías utilizadas para soportar o permitir los servicios bancarios y financieros. La construcción de una aplicación fintech es la tendencia actual del sector, y Express.js es el framework elegido para construir aplicaciones fintech altamente escalables.

Si estás pensando en construir una aplicación fintech con un alto volumen de usuarios y transacciones, entonces te unirás a empresas como Paypal y Capital One al desarrollar y desplegar tu aplicación utilizando Express.js.

Por Qué Deberías usar Express.js

Hay varias razones por las que deberías considerar el uso de Express.js para tu próximo proyecto, desde una mayor velocidad de E/S para peticiones y respuestas más rápidas hasta su sistema de hilo único y procesos asíncronos. También utiliza la estructura MVC para simplificar las manipulaciones de datos y los sistemas de enrutamiento.

Echemos un vistazo a algunas de las principales razones por las que deberías considerar el uso de Express.js.

Flexible y Rápido

Express.js es muy fácil de usar y flexible, y es más rápido que cualquier otro framework Node.js. Al ser un framework minimalista, ofrece un rápido desarrollo de aplicaciones y alivia el estrés de dominar las diferentes partes de un framework más grande. También proporciona ricas características, como un excelente sistema de enrutamiento, middlewares y negociación de contenidos desde el primer momento.

Parte de la Stack MEAN

Express.js es el framework de elección en cada stack representado con la E en cualquiera de los stacks, como MERN, MEAN, etc. También se puede integrar fácilmente en cualquier stack o tecnología para mostrar lo vital que es el framework en el proceso de desarrollo del stack MEAN.

Además, puede conectarse eficazmente con un sistema de gestión de bases de datos más robusto que el convencional MySQL y proporciona un proceso de desarrollo sin fisuras en cada stack. Esta combinación de características hace que Express.js sea muy popular entre los desarrolladores MEAN.

Escalabilidad

Express.js ha demostrado ser muy escalable a lo largo de los años debido al número de grandes empresas que utilizan el framework en su servidor diariamente.

Maneja las peticiones y respuestas de los usuarios de forma eficiente y no requiere apenas configuración adicional cuando se desarrolla una aplicación web a gran escala.

Tiene excelentes módulos, paquetes y recursos adicionales, que ayudan a los desarrolladores a crear aplicaciones web fiables y escalables.

Compatible con el Motor V8 de Google

Express.js es compatible con muchos paquetes del motor V8 de Google, lo que hace que el framework sea muy potente para construir y desplegar aplicaciones en tiempo real, colaborativas y basadas en la red a nivel empresarial.

El motor V8 de Google es un motor JavaScript y WebAssembly de código abierto de alto rendimiento que admite una gran velocidad y escalabilidad para aplicaciones complejas e intensas. Cuando utilizas paquetes que emplean el motor Google V8, tu aplicación backend recibe un enorme impulso de rendimiento y escalabilidad.

Apoyo de la Comunidad

Como el framework es el más popular de Node.js backend, tiene el mayor número de apoyo de la comunidad, recursos y paquetes para cualquier desafío de desarrollo. El apoyo de Google también es amplio, por lo que el framework es una opción popular entre los desarrolladores de Node.js. Su naturaleza de código abierto da a los desarrolladores la oportunidad de crear paquetes y recursos extensibles para facilitar el desarrollo, no sólo para ellos mismos, sino para todos los que programan con Express.js.

Potente Sistema de Enrutamiento

El framework tiene el sistema de enrutamiento más potente y robusto incorporado por defecto que asiste a su aplicación en respuesta a una solicitud del cliente a través de un endpoint particular.

Con el sistema de enrutamiento de Express.js, puedes dividir tu abultado sistema de enrutamiento en archivos manejables utilizando la instancia de enrutamiento del framework.

El sistema de enrutamiento de Express es útil para gestionar la estructura de tu aplicación, agrupando diferentes rutas en una única carpeta/directorio.

Los desarrolladores crean códigos más mantenibles agrupando las funcionalidades con el enrutador Express y evitando la repetición.

Middleware

Express.js es un framework que comprende una serie de middleware para crear un proceso de desarrollo sin fisuras.

Los middlewares son códigos que se ejecutan antes de que una petición HTTP llegue al manejador de rutas o antes de que un cliente reciba una respuesta, lo que da al framework la capacidad de ejecutar un script típico antes o después de la petición de un cliente.

Con los middlewares, los desarrolladores pueden introducir scripts para interceptar el flujo de la aplicación; por ejemplo, los desarrolladores pueden utilizar los middlewares para comprobar si un usuario se ha conectado o desconectado correctamente.

Cómo Funciona Express.js

Dado que Express.js utiliza el modelo cliente-servidor para aceptar las peticiones de los usuarios y devolver las respuestas al cliente, su funcionamiento no es muy diferente del de otros frameworks populares, como Laravel.

Cuando un usuario envía una petición desde su navegador web escribiendo la dirección de un sitio web, el navegador envía una petición HTTP a la aplicación/servidor (muchas aplicaciones creadas con Express.js están alojadas en algún lugar de la nube).

El servidor recibirá la petición a través de una de sus rutas y la procesará utilizando el controlador que coincida con la ruta solicitada.

Tras el procesamiento, el servidor enviará una respuesta al cliente utilizando HTTP, ya que se trata de un protocolo de comunicación de ida y vuelta. La respuesta devuelta al cliente puede ser un texto estándar, una página HTML dinámica que el navegador procesará y mostrará una bonita página web, o datos JSON que los desarrolladores del frontend manejarán para mostrar información en la página web.

Vamos a crear un servidor sencillo que escuche las peticiones entrantes desde una URL y un número de puerto específicos con Express.js:

const express = require('express')
const app = express()
const port = 4000

app.get('/', (request, response) => {
  response.send('Testing Hello World!')
})

app.listen(port, () => {
  console.log(`Test app listening at http://localhost:${port}`)
})

Este es un simple servidor Express.js que escuchará las peticiones entrantes en http://localhost:4000/ y devolverá una respuesta de texto de «¡Probando Hola Mundo!«.

Cómo Crear una Aplicación Express.js

Ahora, vamos a crear una aplicación de demostración del mundo real utilizando el nuevo Express.js 5.0. Para empezar, crea un directorio para tu nueva aplicación e instala los siguientes paquetes:

mkdir first-express-app
cd first-express-app

npm install [email protected] --save

A continuación, crea un archivo index.js en el directorio root y pega en él lo siguiente

touch index.js

Después de configurar el servidor como se ha demostrado anteriormente, crearemos un array Todos que contenga todos nuestros todos que se devolverán al usuario en función del endpoint llamado. Añade el siguiente código al archivo index.js:

const express = require("express");
const app = express();
const port = 3000;
app.listen(port, () => {
  console.log(`Test app listening at http://localhost:${port}`)
})
const todos = [
  {
    title: "Todo 1",
    desc: "This is my first Todo",
    completed: true,
  },
  {
    title: "Todo 2",
    desc: "This is my second Todo",
    completed: true,
  },

  {
    title: "Todo 3",
    desc: "This is my third Todo",
    completed: true,
  },

  {
    title: "Todo 4",
    desc: "This is my fourth Todo",
    completed: true,
  },

  {
    title: "Todo 5",
    desc: "This is my fifth Todo",
    completed: true,
  },
];
// Data source ends here

A continuación, crearemos un endpoint para recuperar todos los Todos almacenados en nuestro servidor:

app.get("/todos", (request, response) => {
  response.status(200).json(todos);
});

A continuación, un endpoint para recuperar un único Todo basado en el ID del Todo:

app.get("/todos/:id", (request, response) => {
  response
    .status(200)
    .json({ data: todos.find((todo) => todo.id === request.params.id) });
});

Ahora, un endpoint para almacenar un nuevo todo:

app.post("/todos", (request, response) => {
  todos.push(request.body);
  response.status(201).json({ msg: "Todo created successfully" });
});

A continuación, un endpoint para actualizar un todo existente con el ID:

app.put("/todos/:id", (request, response) => {
  const todo = todos.find((todo) => todo.id === request.params.id);
  if (todo) {
    const { title, desc, completed } = request.body;
    todo.title = title;
    todo.desc = desc;
    todo.completed = completed;
    response.status(200).json({ msg: "Todo updated successfully" });
    return;
  }
  response.status(404).json({ msg: "Todo not found" });
});

Por último, crearemos un endpoint para eliminar un único todo basado en el ID:

app.delete("/todos/:id", (request, response) => {
  const todoIndex = todos.findIndex((todo) => (todo.id = request.params.id));
  if (todoIndex) {
    todos.splice(todoIndex, 1);
    response.status(200).json({ msg: "Todo deleted successfully" });
  }
  response.status(404).json({ msg: "Todo not found" });
});

Este fragmento de código muestra cómo implementar una funcionalidad DELETE en Express.js. Recoge el ID de Todo a través de parámetros y busca en el array el ID que coincide y lo borra.

Probando la Aplicación Express.js

¡Ahora es el momento de probar nuestra nueva aplicación Express.js! Ejecuta el siguiente comando para probar nuestra recién desarrollada API REST con Postman y asegurarte de que tenemos los datos correctos:

node index.js

Puedes descargar Postman desde la página oficial y ejecutar la prueba que aparece a continuación. Ahí lo tienes, para aprender más, te sugerimos que crees más funcionalidades utilizando el enfoque que hemos comentado en el artículo y amplíes tus conocimientos sobre Express.js

Una captura de pantalla de una UX para probar la API Express.js, mostrando los resultados de una prueba ejecutada.
Resultado de la API Express.js

Resumen

Express.js es el framework más popular del ecosistema Node.js, y no es difícil ver por qué. Ofrece un amplio abanico de ventajas y características de las que beneficiarse.

La escasa curva de aprendizaje de Express.js hace que sea muy sencillo y fácil empezar a utilizarlo. Abstrae las funciones innecesarias o no deseadas de la aplicación web y te proporciona una fina capa de funciones básicas que permiten la flexibilidad.

Además, como el framework Express.js es la base de Node.js, conocer Express.js te proporciona automáticamente un buen conocimiento de otros frameworks populares. Este conocimiento puede ayudarte a tomar decisiones vitales sobre la construcción de la lógica del negocio, sobre qué framework utilizar aparte de Express.js, y sobre cuándo utilizar paquetes por defecto o de usuario.

¿Qué es lo próximo que piensas construir con Express.js? Háznoslo saber en la sección de comentarios.