Menu
CoddyTech

Router de Express

Parte de la sección Conceptos básicos de Express del Journey de Node.js de Coddy. Lección 19 de 23.

server.js ahora contiene páginas, rutas de API y middleware, y sigue creciendo.

// routes/books.js
const router = express.Router();
router.get('/', (req, res) => res.json(books));
router.get('/:isbn', (req, res) => res.json(findBook(req.params.isbn)));
export default router;

// server.js
app.use('/api/books', booksRouter);

express.Router() crea una pequeña aplicación con sus propias rutas, que se mantienen en su propio archivo. app.use('/api/books', booksRouter) la monta: el / del enrutador responde a GET /api/books, y su /:isbn responde a GET /api/books/9780141439518. El prefijo se escribe una sola vez, en app.use. Los errores lanzados dentro de un enrutador siguen llegando al controlador de errores de la aplicación.

El nuevo archivo routes/recipes.js ya tiene una ruta, /tags.

challenge icon

Desafío

Fácil

server.js sigue creciendo. Mueve la API de recetas a su propio archivo, routes/recipes.js, que ya tiene una ruta que enumera todas las etiquetas.

  1. En routes/recipes.js, debajo de la ruta /tags, agrega las cuatro rutas de la API de server.js: la lista, una receta por id, la ruta POST que agrega una receta y la ruta para ajustar las cantidades. Dentro de un enrutador, omite la parte /api/recipes de cada ruta: /api/recipes/:id se convierte en /:id, y la lista se convierte en /.
  2. Mantenlas debajo de /tags. Express prueba las rutas en orden, y si /:id se coloca primero, coincidirá con /tags y buscará una receta cuyo id sea tags.
  3. Elimina esas cuatro rutas de server.js.
  4. En server.js, importa el enrutador desde ./routes/recipes.js y móntalo en /api/recipes con app.use, donde estaban las cuatro rutas: después de express.json() y antes del controlador 404.

Pruébalo: Pulsa «Ejecutar» y envía /api/recipes/tags. Deberías ver ["breakfast","dinner","soup","sweet","vegan"]. Envía /api/recipes/2: la receta Pancakes, como antes. Envía por POST {"title": "Toast"} a /api/recipes: estado 201. Después, envía /api/recipes/5/scale?by=2: estado 500 y {"error":"Something went wrong"}, así que los errores lanzados dentro del enrutador siguen llegando a tu controlador de errores. Las URL no cambiaron; solo cambió dónde está el código.

Pruébalo tú mismo

import express from 'express';
import { recipes } from '../data.js';

const router = express.Router();

// Cada etiqueta, una sola vez, en orden alfabético.
router.get('/tags', (req, res) => {
    const tags = new Set(recipes.flatMap((recipe) => recipe.tags));
    res.json([...tags].sort());
});

// Mueve las rutas de /api/recipes desde server.js aquí, debajo de /tags.
// Dentro de un router, las rutas son relativas al lugar donde está montado.

export default router;
quiz iconPonte a prueba

Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.

Todas las lecciones de Conceptos básicos de Express

Practica por tu cuenta: Playground de Express