Visión general de Express.js.
Introducción
Express.js es un framework de aplicaciones web rápido y minimalista para Node.js. Proporciona una forma simple y poderosa de construir aplicaciones web y APIs. Con su sólido conjunto de características y sintaxis fácil de usar, Express.js se ha convertido en uno de los frameworks de desarrollo web más populares.
Historia
Express.js fue creado por TJ Holowaychuk y lanzado en 2010. Fue diseñado como una alternativa liviana a los frameworks más complejos y ricos en características disponibles en ese momento. Desde su lanzamiento, Express.js ha ganado una gran y activa comunidad de desarrolladores, convirtiéndolo en una opción principal para construir aplicaciones web en Node.js.
Características
- Enrutamiento: Express.js te permite definir rutas para manejar diferentes solicitudes HTTP. Aquí tienes un ejemplo de una ruta básica que responde con "¡Hola, Mundo!" cuando se realiza una solicitud GET a la URL raíz ("/"):
const express = require('express');
const app = express();
app.get('/', (req, res) => {
res.send('¡Hola, Mundo!');
});
app.listen(3000, () => {
console.log('Servidor iniciado en el puerto 3000');
});
Cuando ejecutas este código y visitas http://localhost:3000 en tu navegador, verás el mensaje "¡Hola, Mundo!".
- Middleware: Express.js utiliza funciones middleware para manejar solicitudes y realizar tareas adicionales. Las funciones middleware se pueden utilizar para tareas como registro, autenticación y manejo de errores. Aquí tienes un ejemplo de una función middleware que registra la URL de cada solicitud:
const express = require('express');
const app = express();
app.use((req, res, next) => {
console.log(`Solicitud recibida: ${req.url}`);
next();
});
app.get('/', (req, res) => {
res.send('¡Hola, Mundo!');
});
app.listen(3000, () => {
console.log('Servidor iniciado en el puerto 3000');
});
Cuando ejecutas este código y realizas una solicitud a cualquier URL, el servidor registrará la URL en la consola.
- Motores de plantillas: Express.js admite varios motores de plantillas, como EJS y Pug, para renderizar páginas HTML dinámicas. Aquí tienes un ejemplo de cómo usar el motor de plantillas EJS para renderizar una página dinámica:
const express = require('express');
const app = express();
app.set('view engine', 'ejs');
app.get('/', (req, res) => {
res.render('index', { name: 'John' });
});
app.listen(3000, () => {
console.log('Servidor iniciado en el puerto 3000');
});
Crea un archivo llamado index.ejs en un directorio llamado views y agrega el siguiente contenido:
<html>
<head>
<title>Hola, <%= name %></title>
</head>
<body>
<h1>Hola, <%= name %></h1>
</body>
</html>
Cuando ejecutas este código y visitas http://localhost:3000, verás una página que dice "Hola, John".
- Archivos estáticos: Express.js te permite servir archivos estáticos, como archivos CSS y JavaScript, directamente desde un directorio. Aquí tienes un ejemplo de cómo servir archivos estáticos desde un directorio llamado
public:
const express = require('express');
const app = express();
app.use(express.static('public'));
app.listen(3000, () => {
console.log('Servidor iniciado en el puerto 3000');
});
Coloca tus archivos estáticos (por ejemplo, un archivo CSS llamado styles.css) en el directorio public. Luego puedes hacer referencia al archivo estático en tu HTML de la siguiente manera:
<link rel="stylesheet" href="/styles.css">
- Manejo de errores: Express.js proporciona middleware para manejar errores que ocurren durante el procesamiento de solicitudes. Aquí tienes un ejemplo de un middleware de manejo de errores que registra un mensaje de error y envía una página de error personalizada:
const express = require('express');
const app = express();
app.get('/', (req, res, next) => {
const error = new Error('Algo salió mal');
next(error);
});
app.use((err, req, res, next) => {
console.error(err.stack);
res.status(500).send('¡Algo se rompió!');
});
app.listen(3000, () => {
console.log('Servidor iniciado en el puerto 3000');
});
Cuando visitas http://localhost:3000, se lanzará un error y el middleware de manejo de errores registrará el error y enviará una respuesta con el mensaje "¡Algo se rompió!".
Para obtener información más detallada y ejemplos, puedes consultar la documentación oficial de Express.js en expressjs.com.
Ejemplos
- Servidor básico de Express.js:
const express = require('express');
const app = express();
app.get('/', (req, res) => {
res.send('¡Hola, Mundo!');
});
app.listen(3000, () => {
console.log('Servidor iniciado en el puerto 3000');
});
Este ejemplo crea un servidor básico de Express.js que escucha en el puerto 3000 y responde con "¡Hola, Mundo!" cuando se realiza una solicitud GET a la URL raíz ("/").
- Uso de Middleware:
const express = require('express');
const app = express();
app.use((req, res, next) => {
console.log(`Solicitud recibida: ${req.url}`);
next();
});
app.get('/', (req, res) => {
res.send('¡Hola, Mundo!');
});
app.listen(3000, () => {
console.log('Servidor iniciado en el puerto 3000');
});
Este ejemplo demuestra el uso de middleware en Express.js. La función middleware registra la URL de cada solicitud antes de pasarla al siguiente controlador.
- Renderización de páginas dinámicas:
const express = require('express');
const app = express();
app.set('view engine', 'ejs');
app.get('/', (req, res) => {
res.render('index', { name: 'John' });
});
app.listen(3000, () => {
console.log('Servidor iniciado en el puerto 3000');
});
En este ejemplo, se utiliza el motor de plantillas EJS para renderizar una página HTML dinámica. El archivo de plantilla index.ejs recibe una variable name y muestra un saludo personalizado.
- Servir archivos estáticos:
const express = require('express');
const app = express();
app.use(express.static('public'));
app.listen(3000, () => {
console.log('Servidor iniciado en el puerto 3000');
});
Este ejemplo muestra cómo servir archivos estáticos (por ejemplo, CSS, JavaScript) desde el directorio public. Los archivos estáticos se pueden hacer referencia en HTML utilizando sus rutas relativas.
- Manejo de errores:
const express = require('express');
const app = express();
app.get('/', (req, res, next) => {
const error = new Error('Algo salió mal');
next(error);
});
app.use((err, req, res, next) => {
console.error(err.stack);
res.status(500).send('¡Algo se rompió!');
});
app.listen(3000, () => {
console.log('Servidor iniciado en el puerto 3000');
});
En este ejemplo, se lanza intencionalmente un error al visitar la URL raíz. El middleware de manejo de errores registra la traza de error y envía una respuesta de error personalizada con el mensaje "¡Algo se rompió!".
Estos ejemplos brindan una idea del poder y la flexibilidad de Express.js. Puedes explorar más características y funcionalidades consultando la documentación oficial y experimentando con diferentes fragmentos de código.