Parametros de rutas y modularización
¿Qué son los parámetros de rutas? Son formas de manejar URLs dinámicas en una API. Express permite definir rutas que capturen valores directamente desde la URL.
¿Para qué sirve?
Para interactuar con recursos específicos: por ejemplo, obtener un usuario por ID (/users/123
) o filtrar productos (/products?category=ropa
).
Parámetros de Ruta (:param)
Se usan para capturar valores dinámicos desde el path:
app.get('/users/:id', (req, res) => {
const { id } = req.params;
res.send(`Usuario con ID: ${id}`);
});
🔸 Si vas a /users/42, la respuesta será: “Usuario con ID: 42”
Parámetros de Consulta (Query Params)
Son clave-valor en la URL:
app.get('/search', (req, res) => {
const { q } = req.query;
res.send(`Buscando: ${q}`);
});
🔸 Si vas a /search?q=perro, devuelve “Buscando: perro”
Parámetros en POST (Body Params)
Se leen del cuerpo de la petición. Requieren middleware:
app.use(express.json()); // Para que express entienda json
app.post('/users', (req, res) => {
const { name } = req.body;
res.send(`Creando usuario: ${name}`);
});
Modularización de Rutas
La modularización es el proceso de dividir el código en partes reutilizables y mantenibles. En Express, esto se traduce en separar las cosas en archivos distintos para no tener todo en el index.js o app.js.
¿Para qué sirve? Para que tu app no se convierta en una sopa de código. Mejora la legibilidad, la escalabilidad y permite el trabajo en equipo.
¿Por qué conocer esto mejora tus habilidades como desarrollador? Porque cuando trabajás en proyectos reales, si no separás las rutas, vas a terminar llorando frente al index.js de 800 líneas. Además, esto demuestra que sabés mantener limpio un código backend.
Ejemplo/Analogía: Pensá en una cocina: no tenés todos los ingredientes tirados en el piso. Usás cajones, estantes, frascos. Lo mismo con tu código: cada cosa en su lugar.
Ejemplo en código.
Supongamos que contamos con un archivo como este:
import express from 'express';
const app = express();
app.get('/productos', function (req, res) {
res.json({
message: 'Listado de productos'
});
})
app.post('/productos', function (req, res) {
res.json({
message: 'Producto creado'
});
})
app.put('/productos/:id', function (req, res) {
res.json({
message: 'Producto actualizado'
});
})
app.delete('/productos/:id', function (req, res) {
res.json({
message: 'Producto eliminado'
});
})
app.listen(3000, function () {
console.log('Servidor escuchando en el puerto 3000');
});
Seguramente más adelante vamos a querer agregar muchas más rutas, ya sea para usuarios, carritos, etc. En ese caso, la solución es crear un archivo aparte para las rutas y un archivo aparte para las rutas de usuarios y carritos y asi sucesivamente.
¿Cómo hacemos eso? Es muy sencillo:
- Creamos una carpeta llamada
routes
dentro de la carpeta de nuestro proyecto - Creamos un archivo llamado
[cualquiercosa].routes.js
dentro de la carpetaroutes
(donde[cualquiercosa]
es el nombre que quieras darle a tu archivo. Ej:users.routes.js
) - Dentro de ese archivo, importamos
express
y lo usamos para crear un router. Además vamos a pasar las rutas que tengamos creadas a ese router
import express from 'express';
const router = express.Router();
/*
Notese que las rutas cambiaron de `/productos` a `/`
Esto es porque ahora tenemos un archivo aparte para las rutas. El prefijo 'productos' se lo vamos a dar en el siguiente paso
*/
router.get('/', function (req, res) {
res.json({
message: 'Listado de productos'
});
})
router.post('/', function (req, res) {
res.json({
message: 'Producto creado'
});
})
router.put('/:id', function (req, res) {
res.json({
message: 'Producto actualizado'
});
})
router.delete('/:id', function (req, res) {
res.json({
message: 'Producto eliminado'
});
})
export default router; // Lo vamos a querer exportar para llamarlo en nuestro index.js
- En nuestro archivo
index.js
, importamos el router que acabamos de crear:
import express from 'express';
import productosRoutes from './routes/productos.routes.js'; // Importamos el router
const app = express();
app.use('/productos', productosRoutes)
app.listen(3000, function () {
console.log('Servidor escuchando en el puerto 3000');
});
Conclusion
Lo que hemos hecho es crear un archivo aparte para las rutas, y lo importamos en el index.js. En el index.js, usamos el router que hemos creado para manejar las rutas.
Cuando dividimos la responsabilidad en diferentes archivos, nos ayuda a mantener el código limpio y organizado. A esto le llamamos modularización
A medida que los proyectos crecen, la modularización se vuelve muy importante.