Menu
CoddyTech

Roteador do Express

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

server.js agora contém páginas, rotas de API e middleware, e continua crescendo.

// 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() cria um pequeno app com rotas próprias, mantido em seu próprio arquivo. app.use('/api/books', booksRouter) o monta: o / do roteador responde a GET /api/books, e seu /:isbn responde a GET /api/books/9780141439518. O prefixo é escrito uma única vez, em app.use. Erros lançados dentro de um roteador ainda chegam ao manipulador de erros do app.

O novo arquivo routes/recipes.js já tem uma rota, /tags.

challenge icon

Desafio

Fácil

server.js continua crescendo. Mova a API de receitas para seu próprio arquivo, routes/recipes.js, que já tem uma rota que lista todas as tags.

  1. Em routes/recipes.js, abaixo da rota /tags, adicione as quatro rotas da API que estão em server.js: a lista, uma receita pelo id, o POST que adiciona uma receita e a rota de ajuste de porções. Dentro de um roteador, omita a parte /api/recipes de cada caminho: /api/recipes/:id passa a ser /:id, e a lista passa a ser /.
  2. Mantenha-as abaixo de /tags. O Express tenta as rotas na ordem, e /:id colocado primeiro corresponderia a /tags e procuraria uma receita cujo id fosse tags.
  3. Exclua essas quatro rotas de server.js.
  4. Em server.js, importe o roteador de ./routes/recipes.js e monte-o em /api/recipes com app.use, no local onde estavam as quatro rotas: depois de express.json() e antes do manipulador de 404.

Experimente: pressione Run e envie /api/recipes/tags. Você deverá ver ["breakfast","dinner","soup","sweet","vegan"]. Envie /api/recipes/2: a receita Pancakes, como antes. Faça um POST de {"title": "Toast"} para /api/recipes: status 201. Depois envie /api/recipes/5/scale?by=2: status 500 e {"error":"Something went wrong"}, para que os erros lançados dentro do roteador ainda cheguem ao seu manipulador de erros. As URLs não mudaram; apenas o local onde o código fica mudou.

Experimente você mesmo

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

const router = express.Router();

// Cada tag, uma única vez, em ordem alfabética.
router.get('/tags', (req, res) => {
    const tags = new Set(recipes.flatMap((recipe) => recipe.tags));
    res.json([...tags].sort());
});

// Mova as rotas de /api/recipes de server.js para cá, abaixo de /tags.
// Dentro de um router, os caminhos são relativos ao local onde ele está montado.

export default router;
quiz iconTeste seus conhecimentos

Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.

Todas as lições de Fundamentos de Express

Pratique por conta própria: Playground de Express