Kodokon kodokon.com

Express: rutas y middleware

Instala Express y estructura tu primer servidor con rutas, parámetros de URL y middleware.

9 min · 3 preguntas

Abrir esta lección en Kodokon

Ya sabes cómo arrancar un servidor con el módulo nativo http: ahí todo es manual, desde leer la URL hasta ensamblar las cabeceras. Express es el framework que estandarizó el desarrollo web del lado de Node: enrutamiento, middleware, una API concisa, sin ocultar nada del protocolo. Crea un proyecto e instálalo.

BASH
mkdir kodokon-api
cd kodokon-api
npm init -y
npm install express

Añade la propiedad type con el valor module a tu package.json: todo el proyecto usará módulos ES. Luego crea server.js. Bastan unas pocas líneas para tener un servidor funcional: creas la aplicación, declaras una ruta y escuchas en un puerto.

JAVASCRIPT
import express from "express";

const app = express();

app.get("/", (req, res) => {
  res.send("Kodokon API online");
});

app.listen(3000, () => {
  console.log("http://localhost:3000");
});
server.js - ejecútalo con node server.js

Una ruta asocia un método HTTP y un path a una función. Los segmentos dinámicos se declaran con dos puntos: en /users/:id, el valor está disponible en req.params.id. Los parámetros de consulta (?q=node) aparecen en req.query. Ten presente la distinción: el path identifica el recurso, la cadena de consulta afina la petición.

JAVASCRIPT
app.get("/users/:id", (req, res) => {
  const { id } = req.params;
  res.json({ id, name: "User " + id });
});

app.get("/search", (req, res) => {
  const { q } = req.query;
  res.json({ query: q ?? "" });
});

Un middleware es una función que se ejecuta entre la llegada de la petición y tu ruta. Su firma: (req, res, next). Puede enriquecer req, responder directamente o ceder el paso con next(). En el fondo, Express no es más que una cadena de middleware: registro (logging), autenticación, análisis del cuerpo. Este registra cada petición con su duración:

JAVASCRIPT
app.use((req, res, next) => {
  const start = Date.now();
  res.on("finish", () => {
    const ms = Date.now() - start;
    console.log(`${req.method} ${req.url} ${ms}ms`);
  });
  next();
});
Decláralo antes de tus rutas para registrarlo todo

Prueba de conocimientos

Comprueba que has retenido los puntos clave de esta lección.

  1. Una ruta se declara con el path /users/:id. ¿Dónde lees el valor de id?
    • En req.query.id
    • En req.params.id
    • En req.body.id
  2. En un middleware de Express, ¿qué hace la llamada a next()?
    • Envía la respuesta de vuelta al cliente
    • Cede el paso al siguiente middleware o ruta
    • Reinicia el servidor
    • Cancela la petición actual
  3. ¿Qué necesitas añadir a package.json para usar la sintaxis import en Node.js?
    • La propiedad type con el valor module
    • La propiedad esm con el valor true
    • Nada, es el comportamiento por defecto