Rutas y Controladores en Express

Definir rutas en Express

Las rutas en Express especifican cómo la aplicación responde a solicitudes en diferentes URL y métodos HTTP.

Ejemplo básico:

javascript
const express = require('express');
const app = express();

app.get('/', (req, res) => {
  res.send('Página de inicio');
});

app.post('/submit', (req, res) => {
  res.send('Formulario enviado');
});

app.listen(3000, () => {
  console.log('Servidor ejecutándose en http://localhost:3000');
});

Parámetros de ruta

Los parámetros de ruta permiten capturar valores dinámicos en la URL usando :.

app.get('/user/:id', (req, res) => {
  const userId = req.params.id;
  res.send(`Usuario ID: ${userId}`);
});

Ejemplo con múltiples parámetros:

javascript
app.get('/user/:id/post/:postId', (req, res) => {
  const { id, postId } = req.params;
  res.send(`Usuario ID: ${id}, Post ID: ${postId}`);
});

Rutas dinámicas y anidadas

Express soporta rutas dinámicas y permite crear rutas anidadas organizadas:

javascript
const express = require('express');
const router = express.Router();

// Ruta principal
router.get('/', (req, res) => {
  res.send('Página de usuarios');
});

// Ruta dinámica
router.get('/:id', (req, res) => {
  res.send(`Perfil del usuario con ID: ${req.params.id}`);
});

// Ruta anidada
router.get('/:id/posts', (req, res) => {
  res.send(`Posts del usuario con ID: ${req.params.id}`);
});

module.exports = router;

En el archivo principal app.js:

javascript
const userRoutes = require('./routes/users');
app.use('/users', userRoutes);

Métodos HTTP en rutas

Express permite manejar diferentes métodos HTTP:

const express = require('express');
const app = express();

app.route('/item')
  .get((req, res) => {
      res.send('Obtener un ítem');
  })
  .post((req, res) => {
      res.send('Crear un ítem');
  })
  .put((req, res) => {
      res.send('Actualizar un ítem');
  })
  .delete((req, res) => {
      res.send('Eliminar un ítem');
  });

app.listen(3000, () => {
  console.log('Servidor ejecutándose en http://localhost:3000');
});

Controladores: Separación de lógica de rutas


Separar la lógica de las rutas en controladores mejora la organización del proyecto.

Ejemplo: Definir un controlador

Archivo controllers/userController.js:

javascript
exports.getUser = (req, res) => {
  res.send('Obtener información del usuario');
};

exports.createUser = (req, res) => {
  res.send('Crear un nuevo usuario');
};

Definir rutas que usen el controlador

Archivo routes/userRoutes.js:

const express = require('express');
const router = express.Router();
const userController = require('../controllers/userController');

router.get('/:id', userController.getUser);
router.post('/', userController.createUser);

module.exports = router;

Integrar rutas y controladores en la aplicación

Archivo app.js:

javascript
const express = require('express');
const app = express();
const userRoutes = require('./routes/userRoutes');

app.use('/users', userRoutes);

app.listen(3000, () => {
  console.log('Servidor ejecutándose en http://localhost:3000');
});