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.
Desafio
Fácilserver.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.
- Em
routes/recipes.js, abaixo da rota/tags, adicione as quatro rotas da API que estão emserver.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/recipesde cada caminho:/api/recipes/:idpassa a ser/:id, e a lista passa a ser/. - Mantenha-as abaixo de
/tags. O Express tenta as rotas na ordem, e/:idcolocado primeiro corresponderia a/tagse procuraria uma receita cujo id fossetags. - Exclua essas quatro rotas de
server.js. - Em
server.js, importe o roteador de./routes/recipes.jse monte-o em/api/recipescomapp.use, no local onde estavam as quatro rotas: depois deexpress.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;
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