Tutorial de Express.js: crea un servidor Node paso a paso
Tutorial de Express.js
Tutorial de Express.js: rutas, middleware, JSON, Express 5 | We.Inc
Crea un servidor Express 5 paso a paso: rutas, middleware, cuerpos JSON, archivos estáticos y un manejador de errores, más un generador de servidor inicial y los cambios de v4 a v5.
Express es un framework web pequeño para Node.js. Instálalo con npm install express, crea una app con express(), añade rutas como app.get('/', handler) y arráncala con app.listen(3000). El middleware como express.json() se ejecuta antes de tus rutas, y un manejador de errores con cuatro argumentos va al final.
La mayoría de los tutoriales de Express siguen mostrando código de la versión 4 que falla o da avisos en la versión 5, que ahora es la que se instala por defecto. Esta guía usa Express 5 de principio a fin, genera un servidor inicial con las partes que marques y termina con una tabla de los cambios que más tropiezos causan al actualizar un proyecto antiguo.
Marca en el generador las funciones que quieres: cuerpos JSON, archivos estáticos, un router, una página 404 y un manejador de errores.
Elige ES modules o CommonJS según tu package.json.
Copia el archivo en index.js, ejecuta npm install express y luego node index.js.
Lee las secciones de abajo para saber qué hace cada parte y en qué se diferencia la versión 5 de la 4.
El orden importa: Express ejecuta el middleware y las rutas en el orden en que los registras, así que los parsers del cuerpo van primero y el manejador de errores va al final.
En Express 5, una ruta async que lanza un error o se rechaza pasa automáticamente a tu manejador de errores. Ya no necesitas un envoltorio alrededor de cada función async.
Usa path.join(__dirname, 'public') o una ruta absoluta para los archivos estáticos, para que el servidor funcione desde cualquier carpeta en la que lo arranques.
Pon NODE_ENV=production en producción. Así el manejador de errores integrado deja de enviar stack traces a los visitantes.
Preguntas frecuentes
¿Qué versión de Node.js necesita Express 5?
Express 5 requiere Node.js 18 o posterior. Si estás atascado en un Node más antiguo, quédate en Express 4 hasta que puedas actualizar el runtime.
¿Por qué req.body es undefined?
No se ejecutó ningún parser del cuerpo para esa petición. Añade app.use(express.json()) para JSON o express.urlencoded() para envíos de formularios antes de tus rutas, y asegúrate de que el cliente envía una cabecera Content-Type que coincida. En Express 5, un cuerpo sin analizar es undefined en lugar de un objeto vacío.
¿Cómo escribo una ruta comodín en Express 5?
Ahora los comodines deben tener nombre. Usa app.get('/*splat', handler) en lugar de '/*'. Para que también coincida la ruta raíz, envuélvelo entre llaves: '/{*splat}'.
¿Qué hace next()?
Pasa la petición al siguiente middleware o ruta que coincida. Usa next() para continuar, next(err) para saltar a los manejadores de errores, o envía una respuesta para cortar la cadena. Si olvidas ambas cosas, la petición se queda colgada.
¿Sigo necesitando body-parser?
No para JSON ni datos de formulario. express.json() y express.urlencoded() vienen integrados. Ten en cuenta que en Express 5 la opción extended del parser urlencoded es false por defecto.
Rutas y parámetros
Una ruta es un método, una ruta de URL y un handler. Los segmentos con nombre como :id se leen de req.params, las query strings de req.query y el cuerpo analizado de req.body.
Responde con res.json() para datos, res.send() para texto o HTML, y res.status(404) encadenado antes de cualquiera de los dos para fijar el código. Express 5 solo acepta números enteros de 100 a 999 en res.status().
El middleware en un párrafo
Un middleware es una función de req, res y next que se ejecuta antes del handler de la ruta. Puede leer o cambiar la petición, terminar la respuesta o ejecutar next(). El registro de logs, las comprobaciones de autenticación, las cabeceras CORS y el análisis del cuerpo son middleware, montado con app.use() para todas las rutas o pasado a una sola ruta.
Preparar un proyecto
Instalar y ejecutar
Crea una carpeta, inicializa package.json, márcalo como proyecto de ES modules e instala Express.
Rutas en su propio archivo
Un router es una mini app. Móntalo bajo un prefijo para que cada ruta interna sea relativa a él.
Los errores async llegan al manejador de errores
En Express 5, una promesa rechazada en una ruta se reenvía por ti. El handler de cuatro argumentos, registrado al final, la convierte en una respuesta.
De Express 4 a 5: qué cambió
Express ofrece codemods para muchos de estos cambios: npx codemod@latest @expressjs/v5-migration-recipe.