Cargando...

Ruteo Simple

El Ruteo Simple en Node.js es una técnica fundamental para dirigir las solicitudes HTTP hacia funciones específicas según la ruta y el método HTTP. Su importancia radica en organizar el flujo de datos, garantizar la escalabilidad de las aplicaciones y mantener un código modular y mantenible. Dominar el ruteo es esencial para construir APIs, servidores web y microservicios eficientes.
Se utiliza Ruteo Simple cuando se necesita diferenciar el comportamiento de la aplicación según la URL solicitada y el método HTTP (GET, POST, PUT, DELETE). En Node.js, esto involucra conceptos clave como sintaxis de JavaScript, estructuras de datos, algoritmos para manipulación de información y principios de programación orientada a objetos. A través de ruteo simple, se aprenden buenas prácticas como manejo adecuado de errores, envío correcto de códigos HTTP, y procesamiento asíncrono seguro de datos.
En este tutorial, aprenderás a crear rutas básicas, manejar solicitudes GET y POST, procesar datos entrantes de manera asíncrona y organizar la lógica de ruteo mediante funciones y clases. Además, se abordarán patrones de diseño, optimización de rendimiento y consideraciones de seguridad, situando al ruteo simple dentro de la arquitectura general del software y la ingeniería de sistemas.

Ejemplo Básico

text
TEXT Code
const http = require('http');
const url = require('url');

function manejador(req, res) {
const ruta = url.parse(req.url, true).pathname;
res.setHeader('Content-Type', 'application/json');

if (req.method === 'GET' && ruta === '/saludo') {
res.statusCode = 200;
res.end(JSON.stringify({ mensaje: '¡Bienvenido a Node.js!' }));
} else if (req.method === 'POST' && ruta === '/datos') {
let body = '';
req.on('data', chunk => body += chunk.toString());
req.on('end', () => {
res.statusCode = 200;
res.end(JSON.stringify({ recibido: JSON.parse(body) }));
});
} else {
res.statusCode = 404;
res.end(JSON.stringify({ error: 'Ruta no encontrada' }));
}

}

const server = http.createServer(manejador);
server.listen(3000, () => console.log('Servidor ejecutándose en [http://localhost:3000](http://localhost:3000)'));

En el ejemplo anterior, se crea un servidor HTTP usando el módulo http de Node.js y se analiza la URL con el módulo url. La función manejador gestiona cada solicitud entrante. Se extrae la ruta y se determina el método HTTP mediante req.method. Para GET /saludo, se envía un mensaje de bienvenida; para POST /datos, se procesan los datos de manera asíncrona utilizando eventos data y end. Cualquier otra ruta devuelve un 404. Este ejemplo ilustra conceptos esenciales de ruteo, manejo asíncrono y envío seguro de respuestas JSON, siguiendo convenciones y buenas prácticas de Node.js.

Ejemplo Práctico

text
TEXT Code
const http = require('http');
const url = require('url');

const almacenDatos = [];

class Router {
constructor() {
this.rutas = {};
}

registrar(metodo, ruta, handler) {
if (!this.rutas[metodo]) this.rutas[metodo] = {};
this.rutas[metodo][ruta] = handler;
}

manejar(req, res) {
const ruta = url.parse(req.url, true).pathname;
const metodo = req.method;
const handler = this.rutas[metodo] && this.rutas[metodo][ruta];

if (handler) {
handler(req, res);
} else {
res.statusCode = 404;
res.end(JSON.stringify({ error: 'Ruta no encontrada' }));
}
}

}

const router = new Router();

router.registrar('GET', '/items', (req, res) => {
res.setHeader('Content-Type', 'application/json');
res.end(JSON.stringify({ items: almacenDatos }));
});

router.registrar('POST', '/items', (req, res) => {
let body = '';
req.on('data', chunk => body += chunk.toString());
req.on('end', () => {
try {
const item = JSON.parse(body);
almacenDatos.push(item);
res.statusCode = 201;
res.end(JSON.stringify({ mensaje: 'Item agregado', item }));
} catch (err) {
res.statusCode = 400;
res.end(JSON.stringify({ error: 'JSON inválido' }));
}
});
});

const server = http.createServer((req, res) => router.manejar(req, res));
server.listen(3000, () => console.log('Servidor ejecutándose en [http://localhost:3000](http://localhost:3000)'));

Este ejemplo avanzado implementa un Router como clase modular, permitiendo registrar rutas con diferentes métodos y manejar las solicitudes de manera centralizada. GET /items retorna los elementos almacenados; POST /items agrega un nuevo elemento, procesando JSON de manera segura con try/catch. Esta estructura modular facilita la escalabilidad, aplica principios OOP y asegura un manejo correcto de errores y datos asíncronos, siguiendo patrones recomendados de Node.js.

Las mejores prácticas incluyen definir correctamente Content-Type, utilizar códigos HTTP apropiados, estructurar rutas modularmente, manejar errores con try/catch y procesar datos asíncronos sin bloqueos. Errores comunes incluyen uso de variables globales, ignorar eventos de error, codificar rutas directamente y no validar datos entrantes. Para depuración, Node.js ofrece herramientas de logging, inspección de memoria y manejo de eventos. Optimización de rendimiento se logra minimizando operaciones bloqueantes, reutilizando objetos y funciones, y gestionando eficientemente eventos. La seguridad requiere validar y sanear los datos de entrada para evitar inyecciones y ataques.

📊 Tabla de Referencia

Node.js Element/Concept Description Usage Example
Router Gestiona rutas de manera modular router.registrar('GET', '/ruta', handler)
req.method Indica el método HTTP de la solicitud if (req.method === 'POST') {...}
req.on('data') Recibe datos de forma asíncrona req.on('data', chunk => {...})
res.end() Envía la respuesta y finaliza la conexión res.end(JSON.stringify({ mensaje: 'Listo'}))
statusCode Código de estado HTTP res.statusCode = 404
Content-Type Tipo de contenido de la respuesta res.setHeader('Content-Type', 'application/json')

Resumen y próximos pasos: Dominar Ruteo Simple permite manejar rutas y métodos HTTP, procesar datos de forma asíncrona y enviar respuestas seguras. La modularidad y el manejo de errores son fundamentales para construir APIs y aplicaciones escalables. Próximos pasos incluyen explorar middleware, autenticación y frameworks como Express.js o Fastify para ruteo avanzado. La práctica continua, lectura de documentación oficial y resolución de ejercicios fortalecerán estas habilidades.

🧠 Pon a Prueba tu Conocimiento

Listo para Empezar

Pon a Prueba tu Conocimiento

Ponte a prueba con este cuestionario interactivo y descubre qué tan bien entiendes el tema

4
Preguntas
🎯
70%
Para Aprobar
♾️
Tiempo
🔄
Intentos

📝 Instrucciones

  • Lee cada pregunta cuidadosamente
  • Selecciona la mejor respuesta para cada pregunta
  • Puedes repetir el quiz tantas veces como quieras
  • Tu progreso se mostrará en la parte superior