Módulo 6·practica·1h
Objetivos de aprendizaje
- Instalar y configurar Express en un proyecto nuevo
- Definir rutas GET con app.get()
- Enviar respuestas HTML y JSON
- Usar parámetros de ruta con req.params
- Levantar el servidor con app.listen()
Primeros Pasos con Express
Vamos a construir nuestro primer servidor Express desde cero, paso a paso.
Setup inicial
bash
mkdir mi-servidor-express
cd mi-servidor-express
npm init -y
npm install express
npm install --save-dev nodemonEdita package.json para agregar type y el script dev:
json
{
"name": "mi-servidor-express",
"version": "1.0.0",
"type": "module",
"scripts": {
"start": "node server.js",
"dev": "nodemon server.js",
"dev:native": "node --watch server.js"
},
"dependencies": {
"express": "^4.18.2"
},
"devDependencies": {
"nodemon": "^3.0.1"
}
}El servidor más simple
javascript
// server.js
import express from "express";
const app = express();
app.get("/", (req, res) => {
res.send("<h1>¡Hola desde Express!</h1>");
});
app.listen(3000, () => {
console.log("Servidor corriendo en http://localhost:3000");
});bash
npm run dev
# Servidor corriendo en http://localhost:3000Tipos de respuesta
Express ofrece varios métodos para responder:
javascript
// Respuesta HTML (string)
app.get("/html", (req, res) => {
res.send("<h1>Respuesta HTML</h1><p>Párrafo de ejemplo</p>");
});
// Respuesta JSON
app.get("/api/datos", (req, res) => {
res.json({
mensaje: "Respuesta en formato JSON",
fecha: new Date().toISOString(),
activo: true,
});
});
// Respuesta con código de estado
app.get("/creado", (req, res) => {
res.status(201).json({ mensaje: "Recurso creado" });
});
// Redirigir
app.get("/ir-a-inicio", (req, res) => {
res.redirect("/");
});
// Enviar un archivo
app.get("/descargar", (req, res) => {
res.download("./archivos/documento.pdf");
});Rutas con parámetros
Los parámetros de ruta se definen con :nombre y se leen de req.params:
javascript
// Parámetro simple
app.get("/usuarios/:id", (req, res) => {
const { id } = req.params;
res.json({ mensaje: `Mostrando usuario con ID: ${id}` });
});
// Múltiples parámetros
app.get("/modulos/:modulo/temas/:tema", (req, res) => {
const { modulo, tema } = req.params;
res.json({
modulo,
tema,
ruta: `/${modulo}/${tema}`,
});
});Query strings
Las query strings (?clave=valor) se leen de req.query:
javascript
// GET /buscar?nombre=ana&activo=true
app.get("/buscar", (req, res) => {
const { nombre, activo } = req.query;
res.json({
filtros: { nombre, activo },
mensaje: `Buscando usuarios con nombre=${nombre}`,
});
});Servidor completo con múltiples rutas
javascript
// server.js — Versión completa
import express from "express";
const app = express();
const PORT = 3000;
// Lista de usuarios en memoria
const usuarios = [
{ id: 1, nombre: "Ana García", ciudad: "Santiago" },
{ id: 2, nombre: "Pedro López", ciudad: "Valparaíso" },
{ id: 3, nombre: "María Soto", ciudad: "Santiago" },
];
// Página de inicio
app.get("/", (req, res) => {
res.send(`
<h1>API de Usuarios</h1>
<ul>
<li><a href="/usuarios">GET /usuarios</a></li>
<li><a href="/usuarios/1">GET /usuarios/1</a></li>
<li><a href="/usuarios?ciudad=Santiago">GET /usuarios?ciudad=Santiago</a></li>
</ul>
`);
});
// GET todos (con filtro opcional por ciudad)
app.get("/usuarios", (req, res) => {
const { ciudad } = req.query;
if (ciudad) {
const filtrados = usuarios.filter(
(u) => u.ciudad.toLowerCase() === ciudad.toLowerCase()
);
return res.json(filtrados);
}
res.json(usuarios);
});
// GET por ID
app.get("/usuarios/:id", (req, res) => {
const id = Number(req.params.id);
const usuario = usuarios.find((u) => u.id === id);
if (!usuario) {
return res.status(404).send(`
<h2 style="color:red">Usuario ${id} no encontrado</h2>
<a href="/usuarios">← Volver a la lista</a>
`);
}
res.json(usuario);
});
// Ruta no encontrada (siempre al final)
app.use((req, res) => {
res.status(404).send(`
<h2 style="color:red">404 — Página no encontrada</h2>
<p>La URL <strong>${req.url}</strong> no existe.</p>
<a href="/">← Ir al inicio</a>
`);
});
app.listen(PORT, () => {
console.log(`Servidor en http://localhost:${PORT}`);
});Probando el servidor
bash
# En el navegador
http://localhost:3000/
http://localhost:3000/usuarios
http://localhost:3000/usuarios/2
http://localhost:3000/usuarios?ciudad=Santiago
# Con curl
curl http://localhost:3000/api/datos
curl http://localhost:3000/usuarios/99 # → 404