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.
Desafío
Fácilserver.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.
- En
routes/recipes.js, debajo de la ruta/tags, agrega las cuatro rutas de la API deserver.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/recipesde cada ruta:/api/recipes/:idse convierte en/:id, y la lista se convierte en/. - Mantenlas debajo de
/tags. Express prueba las rutas en orden, y si/:idse coloca primero, coincidirá con/tagsy buscará una receta cuyo id seatags. - Elimina esas cuatro rutas de
server.js. - En
server.js, importa el enrutador desde./routes/recipes.jsy móntalo en/api/recipesconapp.use, donde estaban las cuatro rutas: después deexpress.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;
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