En este tema, aprenderemos cómo manejar solicitudes (requests) y respuestas (responses) en un servidor HTTP utilizando Node.js. Este es un aspecto fundamental para construir aplicaciones web, ya que nos permite interactuar con los clientes que realizan peticiones a nuestro servidor.
Conceptos Clave
- Solicitud (Request): Es una petición que un cliente (por ejemplo, un navegador web) envía a un servidor. Contiene información como la URL solicitada, los métodos HTTP (GET, POST, etc.), y los encabezados (headers).
- Respuesta (Response): Es la respuesta que el servidor envía de vuelta al cliente. Contiene el código de estado HTTP, los encabezados y, opcionalmente, un cuerpo (body) con datos.
Ejemplo Práctico
Vamos a crear un servidor HTTP simple que maneje solicitudes y respuestas.
Paso 1: Crear un Servidor HTTP
Primero, necesitamos importar el módulo http de Node.js y crear un servidor.
const http = require('http');
// Crear el servidor
const server = http.createServer((req, res) => {
// Manejo de solicitudes y respuestas aquí
});
// El servidor escucha en el puerto 3000
server.listen(3000, () => {
console.log('Servidor escuchando en el puerto 3000');
});Paso 2: Manejar Solicitudes
Dentro del callback del servidor, podemos acceder al objeto req (request) para obtener información sobre la solicitud.
const http = require('http');
const server = http.createServer((req, res) => {
console.log(`Método: ${req.method}`);
console.log(`URL: ${req.url}`);
console.log(`Encabezados: ${JSON.stringify(req.headers)}`);
// Responder al cliente
res.statusCode = 200;
res.setHeader('Content-Type', 'text/plain');
res.end('Hola, Mundo!\n');
});
server.listen(3000, () => {
console.log('Servidor escuchando en el puerto 3000');
});Explicación del Código
- Método HTTP:
req.methodnos da el método HTTP de la solicitud (GET, POST, etc.). - URL:
req.urlnos da la URL solicitada. - Encabezados:
req.headersnos da los encabezados de la solicitud en forma de objeto.
Paso 3: Enviar una Respuesta
Para enviar una respuesta al cliente, utilizamos el objeto res (response).
const http = require('http');
const server = http.createServer((req, res) => {
res.statusCode = 200; // Código de estado HTTP
res.setHeader('Content-Type', 'text/plain'); // Tipo de contenido
res.end('Hola, Mundo!\n'); // Cuerpo de la respuesta
});
server.listen(3000, () => {
console.log('Servidor escuchando en el puerto 3000');
});Ejercicio Práctico
Ejercicio 1: Modifica el servidor para que responda con un mensaje diferente dependiendo de la URL solicitada.
const http = require('http');
const server = http.createServer((req, res) => {
if (req.url === '/') {
res.statusCode = 200;
res.setHeader('Content-Type', 'text/plain');
res.end('Bienvenido a la página principal!\n');
} else if (req.url === '/about') {
res.statusCode = 200;
res.setHeader('Content-Type', 'text/plain');
res.end('Esta es la página sobre nosotros.\n');
} else {
res.statusCode = 404;
res.setHeader('Content-Type', 'text/plain');
res.end('Página no encontrada.\n');
}
});
server.listen(3000, () => {
console.log('Servidor escuchando en el puerto 3000');
});Solución del Ejercicio
El código anterior maneja diferentes rutas (/ y /about) y responde con mensajes específicos. Si la URL no coincide con ninguna de las rutas definidas, responde con un mensaje de "Página no encontrada" y un código de estado 404.
Resumen
En esta sección, hemos aprendido cómo manejar solicitudes y respuestas en un servidor HTTP utilizando Node.js. Hemos cubierto cómo acceder a la información de la solicitud y cómo enviar una respuesta adecuada al cliente. Estos conceptos son fundamentales para construir aplicaciones web dinámicas y responsivas.
En el próximo tema, exploraremos cómo servir archivos estáticos desde nuestro servidor Node.js.
Curso de Node.js
Módulo 1: Introducción a Node.js
Módulo 2: Conceptos Básicos
Módulo 3: Sistema de Archivos y E/S
Módulo 4: HTTP y Servidores Web
- Creando un Servidor HTTP Simple
- Manejo de Solicitudes y Respuestas
- Sirviendo Archivos Estáticos
- Enrutamiento
Módulo 5: NPM y Gestión de Paquetes
- Introducción a NPM
- Instalación y Uso de Paquetes
- Creación y Publicación de Paquetes
- Versionado Semántico
Módulo 6: Framework Express.js
- Introducción a Express.js
- Configuración de una Aplicación Express
- Middleware
- Enrutamiento en Express
- Manejo de Errores
Módulo 7: Bases de Datos y ORMs
- Introducción a las Bases de Datos
- Usando MongoDB con Mongoose
- Usando Bases de Datos SQL con Sequelize
- Operaciones CRUD
Módulo 8: Autenticación y Autorización
- Introducción a la Autenticación
- Usando Passport.js
- Autenticación JWT
- Control de Acceso Basado en Roles
Módulo 9: Pruebas y Depuración
- Introducción a las Pruebas
- Pruebas Unitarias con Mocha y Chai
- Pruebas de Integración
- Depuración de Aplicaciones Node.js
Módulo 10: Temas Avanzados
- Módulo Cluster
- Hilos de Trabajo
- Optimización del Rendimiento
- Construcción de APIs RESTful
- GraphQL con Node.js
Módulo 11: Despliegue y DevOps
- Variables de Entorno
- Usando PM2 para la Gestión de Procesos
- Desplegando en Heroku
- Integración y Despliegue Continuos
