Express.js: enrutamiento y CRUD
Al finalizar este tema
Podrás crear un servidor web con Express.js y configurar el enrutamiento para enviar diferentes respuestas según la ruta de la URL. También podrás implementar las cuatro operaciones básicas (CRUD) de una API REST.
¿Por qué es necesario Express.js?
Es posible crear un servidor utilizando el módulo integrado http de Node.js. Sin embargo, tendrías que implementar manualmente la bifurcación de URLs, el análisis de parámetros y el manejo de errores. Express.js es un framework web que se encarga de estas tareas repetitivas.
# Instalaciónnpm init -ynpm install express// app.js — Servidor Express más pequeño
const express = require('express');
const app = express();
app.get('/', (req, res) => {
res.send('¡Hola!');
});
app.listen(3000, () => {
console.log('Servidor en ejecución: http://localhost:3000');
});Al ejecutar node app.js, se puede acceder a localhost:3000 en el navegador. Estas 6 líneas son todo lo que Express ofrece; el resto es la repetición y extensión de este patrón.
Enrutamiento: conectar URLs con funciones
El enrutamiento es la regla que establece: "Si llega una solicitud a esta URL, ejecuta esta función".
// GET — Consulta de datos
app.get('/users', (req, res) => {
res.json([{ id: 1, name: 'Kim Hun' }, { id: 2, name: 'Lee Su' }]);
});
// GET — Consultar un elemento específico por parámetro de URL
app.get('/users/:id', (req, res) => {
const userId = req.params.id;
res.json({ id: userId, name: 'Kim Hun' });
});
// POST — Creación de datos
app.use(express.json()); // Análisis del cuerpo de la solicitud JSON es obligatorio
app.post('/users', (req, res) => {
const newUser = req.body;
res.status(201).json({ message: 'Creación completada', user: newUser });
});:id es un parámetro dinámico. Tanto /users/1 como /users/42 coinciden con esta ruta, y se puede extraer el valor mediante req.params.id.
CRUD — Las 4 operaciones básicas
El procesamiento de datos en las aplicaciones web casi siempre se reduce a estas cuatro operaciones.
| Operación | Método HTTP | Ejemplo de URL | Descripción |
|---|---|---|---|
| Create | POST | /users | Crear un nuevo usuario |
| Read | GET | /users o /users/:id | Consultar la lista o un elemento individual |
| Update | PUT | /users/:id | Modificar la información de un usuario específico |
| Delete | DELETE | /users/:id | Eliminar un usuario específico |
// Actualizar — Modificación de datos
app.put('/users/:id', (req, res) => {
const { id } = req.params;
const updatedData = req.body;
res.json({ message: `Usuario ${id} actualizado correctamente`, data: updatedData });
});
// Eliminar — Eliminación de datos
app.delete('/users/:id', (req, res) => {
const { id } = req.params;
res.json({ message: `Usuario ${id} eliminado correctamente` });
});Este patrón se denomina API REST. La URL representa el "qué (sustantivo)" y el método HTTP representa el "cómo (verbo)". Es una estructura en la que cuatro acciones (GET, POST, PUT y DELETE) se mapean a una única URL, /users.
Separación de rutas — cuando los archivos crecen
Cuando hay muchas rutas, no es posible incluirlas todas en un solo app.js. Utilice los Router de Express para separarlas por archivos.
// routes/users.js
const router = require('express').Router();
router.get('/', (req, res) => { res.json([]); });
router.post('/', (req, res) => { res.status(201).json({}); });
router.put('/:id', (req, res) => { res.json({}); });
router.delete('/:id', (req, res) => { res.json({}); });
module.exports = router;// app.js — Montar los enrutadores
const usersRouter = require('./routes/users');
app.use('/users', usersRouter);
// /users + '/' interno del enrutador = GET /users
// /users + '/:id' interno del enrutador = PUT /users/42app.use('/users', usersRouter) es la clave. routes/users.js procesa todas las solicitudes que comienzan con /users. Es la aplicación práctica del tema anterior (modularización de código).
Resumen clave
Express consiste simplemente en conectar "URL → función". Sobre esta estructura básica se integran middleware, autenticación y bases de datos, pero su esencia no cambia. Si dominas los cuatro patrones CRUD, podrás desarrollar la mayoría de las API de backend.
→ Aplicado a Bio: DevBench — Fundamentos de Express