Menu
CoddyTech

Rutas anidadas

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

Las reseñas pertenecen a una receta, así que sus URL se encuentran bajo ella: /api/recipes/2/reviews.

const chapters = express.Router({ mergeParams: true });

chapters.get('/', (req, res) => {
    res.json(chaptersOf(req.params.isbn));
});

app.use('/api/books/:isbn/chapters', chapters);

El req.params de un enrutador contiene solo los parámetros de sus propias rutas. El :isbn de la ruta de montaje pertenece a la aplicación, así que dentro del enrutador su valor es undefined, a menos que el enrutador se cree con mergeParams: true.

routes/reviews.js está listo, con un objeto reviews y una función auxiliar hasRecipe(id).

challenge icon

Desafío

Fácil
  • GET /api/recipes/:id/reviews devuelve las reseñas de esa receta; al principio, [].
  • POST con { "stars", "text" } añade una y responde con 201 y la reseña.
  • Si la receta no existe: 404 con { "error": "No such recipe" }.

Publica una reseña para la receta 1 y después envía GET /api/recipes/1/reviews y GET /api/recipes/99/reviews.

Pruébalo tú mismo

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

// Reseñas por id de receta, como { 1: [{ stars: 5, text: 'Lovely' }] }.
const reviews = {};

const hasRecipe = (id) => recipes.some((recipe) => recipe.id === Number(id));

const router = express.Router();

// GET / muestra las reseñas de una receta. POST / añade una.

export default router;

Todas las lecciones de Conceptos básicos de Express