Express Básico
Express es el framework web más popular de Node.js, con más de 30 millones de descargas semanales. Simplifica enormemente la creación de servidores y APIs REST: lo que en HTTP nativo requería manejar manualmente URLs, métodos, headers y body, Express lo hace automáticamente con una API limpia y expresiva.
Defines rutas con un método por cada tipo de petición HTTP: • app.get('/ruta', fn) → responde a GET (pedir datos) • app.post('/ruta', fn) → responde a POST (crear) • app.put('/ruta', fn) → responde a PUT (actualizar) • app.delete('/ruta', fn) → responde a DELETE (borrar)
Cada función recibe req (la petición) y res (la respuesta). req trae lo que envía el cliente: req.params (partes de la URL), req.query (lo que va después del ?), req.body (el cuerpo) y req.headers. res sirve para responder: res.json(obj) envía JSON, res.status(404) fija el código HTTP y res.send(texto) envía texto. Ejemplo: res.status(404).json({ error: 'No existe' }).
// npm install express nodemon
const express = require('express');
const app = express();
// Middleware para parsear JSON en el body
app.use(express.json());
// Base de datos simulada en memoria
let productos = [
{ id: 1, nombre: 'Laptop', precio: 999 },
{ id: 2, nombre: 'Mouse', precio: 25 },
];
// GET /productos — listar todos
app.get('/productos', (req, res) => {
// req.query accede a ?categoria=tech&orden=precio
const { categoria, orden } = req.query;
res.json({ data: productos, total: productos.length });
});
// GET /productos/:id — obtener uno
app.get('/productos/:id', (req, res) => {
const id = parseInt(req.params.id); // req.params tiene los parámetros de ruta
const producto = productos.find(p => p.id === id);
if (!producto) return res.status(404).json({ error: 'Producto no encontrado' });
res.json(producto);
});
// POST /productos — crear
app.post('/productos', (req, res) => {
const { nombre, precio } = req.body; // req.body requiere express.json()
const nuevo = { id: Date.now(), nombre, precio };
productos.push(nuevo);
res.status(201).json(nuevo);
});
// PUT /productos/:id — reemplazar completo
app.put('/productos/:id', (req, res) => {
const id = parseInt(req.params.id);
const idx = productos.findIndex(p => p.id === id);
if (idx === -1) return res.status(404).json({ error: 'No encontrado' });
productos[idx] = { id, ...req.body };
res.json(productos[idx]);
});
// PATCH /productos/:id — actualización parcial
app.patch('/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: 'No encontrado' });
Object.assign(producto, req.body);
res.json(producto);
});
// DELETE /productos/:id — eliminar
app.delete('/productos/:id', (req, res) => {
const id = parseInt(req.params.id);
productos = productos.filter(p => p.id !== id);
res.status(204).send(); // 204 No Content
});
app.listen(3000, () => console.log('API corriendo en http://localhost:3000'));
Practica esta lección
Resuelve los ejercicios del curso de Node.js y Express en la app, gratis y con corrección automática.
Empezar a practicar