10.1-Usando app.route() en Express - CRUD Sencillo

 ¿Cuándo usar app.route()?

  • Úsalo cuando necesites la misma ruta con diferentes métodos HTTP

  • No lo compliques: usa @app.get(), @app.post(), etc. que son más claros

En resumen: app.route() es el método base, pero para la práctica diaria usa @app.get(), @app.post(), @app.put(), @app.delete() que son más explícitos y fáciles de leer.


Usando app.route() en Express - CRUD Sencillo

app.route() te permite encadenar múltiples métodos HTTP para la misma ruta, haciendo el código más limpio y organizado.

Tu código SIN agrupar (actual)

javascript

// Separados - cada uno independiente

app.get('/productos', (req, res) => {

  res.json({ success: true, cantidad: productos.length, productos: productos });

});

app.post('/productos', (req, res) => {

  const { nombre, precio } = req.body;

  // ... lógica para crear

  res.status(201).json({ mensaje: '✅ Producto creado' });

});





Tu código CON app.route() (agrupado)

javascript

// Agrupados - misma ruta, diferentes métodos

app.route('/productos')

  .get((req, res) => {

    res.json({ success: true, cantidad: productos.length, productos: productos });

  })

  .post((req, res) => {

    const { nombre, precio } = req.body;

    if (!nombre || !precio) {

      return res.status(400).json({ error: 'Faltan datos' });

    }

    const nuevoProducto = {

      id: productos.length + 1,

      nombre: nombre,

      precio: parseFloat(precio)

    };

    productos.push(nuevoProducto);

    res.status(201).json({ mensaje: '✅ Producto creado', producto: nuevoProducto });

  });

Ejemplo práctico COMPLETO con tu código

Así quedaría tu archivo usando app.route():

javascript

const express = require('express');

const app = express();

const PORT = 3000;


// Middlewares

app.use(express.json());

app.use(express.urlencoded({ extended: true }));

app.use(express.static('public'));

app.use('/css', express.static('node_modules/bootstrap/dist/css'));

app.use('/js', express.static('node_modules/bootstrap/dist/js'));


// Datos

let productos = [

…………………………….

];

// ✅ RUTAS AGRUPADAS con app.route()

app.route('/productos')

  .get((req, res) => {

    res.json({

      success: true,

      cantidad: productos.length,

      productos: productos

    });

  })

  .post((req, res) => {

    const { nombre, precio } = req.body;

        if (!nombre || !precio) {

      return res.status(400).json({ error: 'Faltan datos: nombre y precio' });

    }

    const nuevoProducto = {

      id: productos.length + 1,

      nombre: nombre,

      precio: parseFloat(precio)

    };

    productos.push(nuevoProducto);

    res.status(201).json({

      mensaje: '✅ Producto creado',

      producto: nuevoProducto

    });

  });

// Ruta específica con parámetro (no se puede agrupar con los demás)

app.get('/productos/:id', (req, res) => {

  const id = parseInt(req.params.id);

  const producto = productos.find(p => p.id === id);

  if (!producto) {

    return res.status(404).json({ error: 'Producto no encontrado' });

  }

  res.json(producto);

});

// Ruta para formulario (POST separado porque la ruta es diferente)

app.post('/productos-formulario', (req, res) => {

  const { nombre, precio } = req.body;

  if (!nombre || !precio) {

    return res.status(400).send('<h1>Error</h1><p>Faltan datos</p><a href="/">Volver</a>');

  }

  const nuevoProducto = {

    id: productos.length + 1,

    nombre: nombre,

    precio: parseFloat(precio)

  };

  productos.push(nuevoProducto);

  res.redirect('/');

});

// Ruta principal

app.get('/', (req, res) => {

  res.sendFile(__dirname + '/public/index.html');

});


app.listen(PORT, () => {

  console.log(`🚀 Servidor en http://localhost:${PORT}`);

});

Comparativa directa


Tu código original

Con app.route()

GET /productos

app.get() separado

Dentro del route().get()

POST /productos

app.post() separado

Dentro del route().post()

Ventaja

Más explícito

Más organizado para la MISMA ruta

Cuándo usar

Siempre funciona

Cuando la ruta es idéntica

🎯 Regla práctica para Express

javascript

// ❌ NO agrupes si las rutas son diferentes

app.get('/productos')      // GET /productos

app.post('/productos-form') // POST /productos-form (ruta diferente)


// ✅ SÍ agrupa si es la MISMA ruta

app.route('/productos')

  .get()   // GET /productos

  .post()  // POST /productos (misma ruta)

  .put()   // PUT /productos

  .delete()// DELETE /productos

En resumen: En Express, app.route() es útil para organizar el mismo endpoint con diferentes métodos HTTP. Para tu ejemplo, los GET y POST de /productos SÍ se pueden agrupar, pero /productos/:id y /productos-formulario NO porque son rutas diferentes.


📝 RESUMEN

  • app.route() agrupa métodos HTTP para una misma ruta

  • Perfecto para CRUD donde la misma URL responde a GET, POST, PUT, DELETE

  • Hace el código más ordenado y mantenible

  • Puedes encadenar .get(), .post(), .put(), .delete(), .patch()

¡Así de simple es usar app.route()

Es una forma de encadenar métodos HTTP para la misma ruta en un solo lugar.

Sin app.route() (forma normal)

javascript

// Tres funciones separadas para la misma ruta

app.get('/usuarios', (req, res) => {

  res.json({ mensaje: 'Obtener usuarios' });

});


app.post('/usuarios', (req, res) => {

  res.json({ mensaje: 'Crear usuario' });

});


app.delete('/usuarios', (req, res) => {

  res.json({ mensaje: 'Eliminar usuario' });

});

Con app.route() (más ordenado)

javascript

// Todo junto y más limpio

app.route('/usuarios')

  .get((req, res) => {

    res.json({ mensaje: 'Obtener usuarios' });

  })

  .post((req, res) => {

    res.json({ mensaje: 'Crear usuario' });

  })

  .delete((req, res) => {

    res.json({ mensaje: 'Eliminar usuario' });

  });

Ejemplo REAL y práctico

javascript

const express = require('express');

const app = express();

app.use(express.json());


// Base de datos temporal

let productos = [

  { id: 1, nombre: 'Laptop', precio: 1000 },

  { id: 2, nombre: 'Mouse', precio: 25 }

];


// ✅ MISMA RUTA '/productos' con diferentes métodos

app.route('/productos')

  .get((req, res) => {

    // OBTENER todos

    res.json(productos);

  })

  .post((req, res) => {

    // CREAR uno nuevo

    const nuevo = { id: productos.length + 1, ...req.body };

    productos.push(nuevo);

    res.status(201).json(nuevo);

  })

  .put((req, res) => {

    // ACTUALIZAR todos (poco común pero posible)

    productos = req.body;

    res.json(productos);

  })

  .delete((req, res) => {

    // ELIMINAR todos

    productos = [];

    res.json({ mensaje: 'Todos eliminados' });

  });


app.listen(3000);

¿Por qué es útil?


Sin route

Con route

Código

4 bloques separados

1 bloque organizado

Lectura

Saltas buscando rutas

Todo está junto

Mantenimiento

Puedes olvidar una ruta

Fácil de ver qué métodos hay

Tu ejemplo con app.route()

javascript

// Así está ahora (separado)

app.get('/productos', (req, res) => { ... });

app.post('/productos', (req, res) => { ... });


// Así queda con route (junto)

app.route('/productos')

  .get((req, res) => {

    res.json({ success: true, cantidad: productos.length, productos });

  })

  .post((req, res) => {

    const { nombre, precio } = req.body;

    const nuevoProducto = { id: productos.length + 1, nombre, precio };

    productos.push(nuevoProducto);

    res.status(201).json({ mensaje: '✅ Creado', producto: nuevoProducto });

  });

🎯 Regla de oro

Usa app.route() cuando:

  • ✅ La ruta es EXACTAMENTE la misma

  • ✅ Tienes 2 o más métodos HTTP para esa ruta

NO uses app.route() cuando:

  • ❌ Las rutas son diferentes (ej: /productos y /productos/:id)

  • ❌ Solo tienes un método (ej: solo GET)

La diferencia en 10 segundos

javascript

// Esto es desordenado 👎

app.get('/user', ...)

app.post('/user', ...)

app.put('/user', ...)


// Esto es ordenado 👍

app.route('/user')

  .get(...)

  .post(...)

  .put(...)

En resumen

app.route() es un organizador para cuando tienes el mismo "endpoint" pero con diferentes verbos HTTP.

Como un cajón donde guardas todo lo relacionado a /productos:

  • GET /productos (sacar productos)

  • POST /productos (meter productos)

  • PUT /productos (reemplazar productos)

  • DELETE /productos (borrar productos)

Comentarios

Entradas más populares de este blog

Cómo Iniciar un Proyecto Node.js

6-Middleware?

5-Express--Curso de Node.js [ #05 Introducción a Express.js ]