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

  1. 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).
  2. 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

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

Módulo 5: NPM y Gestión de Paquetes

Módulo 6: Framework Express.js

Módulo 7: Bases de Datos y ORMs

Módulo 8: Autenticación y Autorización

Módulo 9: Pruebas y Depuración

Módulo 10: Temas Avanzados

Módulo 11: Despliegue y DevOps

Módulo 12: Proyectos del Mundo Real

© Copyright 2024. Todos los derechos reservados