5-Express
Express: Dominando Servidores Web con Node.js y Express
mi-app/
├app.js
└── package.json
1. Introducción a Express
Express es el framework web más popular para Node.js. Simplifica la creación de servidores HTTP con:
✔️ Enrutamiento intuitivo
✔️ Sistema de middleware potente
✔️ Manejo simplificado de requests/responses
✔️ Compatibilidad con múltiples motores de plantillas
# Iniciar proyecto
npm init -y
npm install express
2. Servidor Básico en 4 Pasos
Archivo: app.js
// 1. Importar Express
const express = require('express');
// 2. Crear aplicación
const app = express();
const PORT = 3000;
// 3. Definir ruta principal
app.get('/', (req, res) => {
res.send('🎉 ¡Servidor Express funcionando!');
});
// 4. Iniciar servidor
app.listen(PORT, () => {
console.log(`Servidor corriendo en http://localhost:${PORT}`);
});
Ejecutar:
node app.js
3. Manejo de Rutas Esencial
Rutas básicas
// GET
app.get('/productos', (req, res) => {
res.send('Lista de productos');
});
// POST
app.post('/productos', (req, res) => {
res.send('Producto creado');
});
Rutas con parámetros
app.get('/usuarios/:id', (req, res) => {
res.send(`Usuario ID: ${req.params.id}`);
});
// Ejemplo: /usuarios/123 → "Usuario ID: 123"
Múltiples métodos
app.route('/libros')
.get((req, res) => res.send('Obtener libros'))
.post((req, res) => res.send('Crear libro'));
4. Middleware Clave
Funciones que procesan requests antes de llegar a las rutas:
Middleware incorporado
// Parsear JSON
app.use(express.json());
// Parsear formularios
app.use(express.urlencoded({ extended: true }));
// Servir archivos estáticos
app.use(express.static('public'));
Middleware personalizado
// Logger de solicitudes
app.use((req, res, next) => {
console.log(`${req.method} ${req.url}`);
next(); // Continuar al siguiente middleware
});
5. Manejo de Errores
// Ruta no encontrada (404)
app.use((req, res) => {
res.status(404).send('Página no encontrada');
});
// Manejador global de errores
app.use((err, req, res, next) => {
console.error(err.stack);
res.status(500).send('¡Error en el servidor!');
});
6. Estructura Profesional
mi-app/
├── controllers/
│ └── userController.js
├── routes/
│ └── userRoutes.js
├── public/
├── app.js
└── package.json
Ejemplo modular:
// routes/userRoutes.js
const router = express.Router();
router.get('/', (req, res) => {
res.send('Lista de usuarios');
});
module.exports = router;
// app.js
const userRoutes = require('./routes/userRoutes');
app.use('/usuarios', userRoutes);
7. Nodemon para Desarrollo
Instalación:
npm install --save-dev nodemon
Configurar en package.json
:
"scripts": {
"start": "node app.js",
"dev": "nodemon app.js"
}
Uso:
npm run dev # Recarga automática al guardar cambios
8. Extendiendo Express
Motor de plantillas (EJS):
npm install ejs
app.set('view engine', 'ejs');
app.get('/', (req, res) => {
res.render('index', { title: 'Inicio' });
});
API REST básica:
app.get('/api/usuarios', (req, res) => {
res.json([{ id: 1, nombre: 'Juan' }]);
});
¿Qué hace app.set('view engine', 'ejs') en Express.js?
Si estás trabajando con Node.js y Express, es probable que hayas visto la línea app.set('view engine', 'ejs')
en tu código. Pero, ¿qué significa exactamente y por qué es importante?
En este artículo, te explico cómo funciona esta configuración y cómo te ayuda a renderizar páginas dinámicas en tu aplicación web.
2. ¿Para qué sirve app.set('view engine', 'ejs')?
La línea:
app.set('view engine', 'ejs');
le dice a Express que usará EJS como motor de plantillas predeterminado. Esto significa que:
✅ No necesitas especificar la extensión al renderizar vistas:
res.render('home'); // Buscará automáticamente "home.ejs"
✅ Permite incrustar JavaScript en HTML:
Con EJS, puedes hacer cosas como:
<h1>Hola, <%= username %>!</h1>
✅ Facilita la organización de vistas:
Express buscará las plantillas en la carpeta views/
por defecto.
🚀 Conclusión
Express te permite crear:
APIs RESTful
Aplicaciones web con SSR
Microservicios
Backends para frontends (React, Vue, etc.)
Próximos pasos:
Conexión a bases de datos (MongoDB/PostgreSQL)
Autenticación (JWT, Passport.js)
Validación de datos (express-validator)
# Plantilla Express completa
npx express-generator --view=ejs
Comentarios
Publicar un comentario