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.method
nos da el método HTTP de la solicitud (GET, POST, etc.). - URL:
req.url
nos da la URL solicitada. - Encabezados:
req.headers
nos 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