Menu
CoddyTech

Rotas Aninhadas

Parte da seção Fundamentos de Express do Journey de Node.js da Coddy. Lição 17 de 20.

As avaliações pertencem a uma receita, então suas URLs ficam sob ela: /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);

O req.params de um roteador contém apenas os parâmetros dos próprios caminhos dele. O :isbn no caminho de montagem pertence ao app, então, dentro do roteador, ele é undefined, a menos que o roteador seja criado com mergeParams: true.

routes/reviews.js está pronto, com um objeto reviews e um auxiliar hasRecipe(id).

challenge icon

Desafio

Fácil
  • GET /api/recipes/:id/reviews retorna as avaliações dessa receita, inicialmente [].
  • POST com { "stars", "text" } adiciona uma avaliação e a retorna com 201.
  • Para uma receita desconhecida: 404 com { "error": "No such recipe" }.

Publique uma avaliação para a receita 1 e, em seguida, envie GET /api/recipes/1/reviews e GET /api/recipes/99/reviews.

Experimente você mesmo

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

// Avaliações por id da receita, como { 1: [{ stars: 5, text: 'Lovely' }] }.
const reviews = {};

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

const router = express.Router();

// GET / lista as avaliações de uma receita. POST / adiciona uma avaliação.

export default router;

Todas as lições de Fundamentos de Express