Inicio > Cursos > Node.js y Express > Express Básico
Node.js y ExpressExpress.jsLección 6 de 20

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'));
ConsejoEn package.json agrega: "dev": "nodemon --watch src src/index.js" para que el servidor se reinicie automáticamente al guardar cambios. Nunca más Ctrl+C y node manualmente.
← Servidor HTTP NativoMiddleware en Profundidad →

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