🌐 ¿Node.js incluye un servidor web?
Sí. Node.js
incluye un módulo nativo llamado http que permite crear servidores web sin necesidad de instalar nada adicional.
🔧 Es un servidor HTTP de bajo nivel, que te da control absoluto sobre el manejo de peticiones y respuestas.
⚙️ ¿Qué tipo de servidor es?
- Asíncrono y basado en eventos
- No bloqueante (non-blocking I/O)
- Monohilo (single-threaded) con un event loop
Esto significa que puede manejar muchas conexiones simultáneamente con eficiencia, sin crear un nuevo hilo por cada conexión (como sí hacen Apache o Java con threads).
🛠️ ¿Qué permite hacer?
Con el módulo http podés:
- Crear servidores HTTP o HTTPS personalizados
- Leer y manejar headers, métodos, rutas, etc.
- Servir HTML, JSON, archivos o respuestas dinámicas
- Integrar con frameworks (como Express.js) que simplifican el desarrollo
🔍 Ejemplo básico:
const http = require('http');
const server = http.createServer((req, res) => {
res.writeHead(200, { 'Content-Type': 'text/plain' });
res.end('¡Hola desde Node.js!\n');
});
server.listen(3000, () => {
console.log('Servidor corriendo en http://localhost:3000');
});
✅ Ventajas
Ventaja | Descripción |
---|---|
🔁 Asincronía y no bloqueo | Maneja miles de conexiones concurrentes |
🧩 Minimalista y flexible | Podés construir desde cero o usar frameworks |
🚀 Rápido para I/O | Ideal para APIs, websockets, chat, streaming |
🎯 Integración directa con JS | Usás un solo lenguaje en todo el stack |
🛠️ Full control | Puedes personalizar el manejo de peticiones |
⚠️ Limitaciones
Limitación | Descripción |
---|---|
🧵 Monohilo | Si una operación bloquea el hilo (ej: CPU intensiva), bloquea todo |
🧱 No es plug-and-play | No tiene soporte nativo para cosas como .htaccess, redirecciones automáticas, etc. |
🔒 Requiere implementar seguridad | No tiene por defecto SSL, rate limiting, CORS, etc. Hay que añadirlos manualmente o con módulos |
📁 No sirve archivos estáticos fácilmente | Hay que programar lógica para servir archivos como .jpg, .css, etc., o usar Express/middleware |
💡 Cuándo usarlo directamente
- Para APIs REST
- Para websockets o servicios en tiempo real
- Para sistemas donde necesitás control total del flujo HTTP
- Para entornos de microservicios
👎 Cuándo no usarlo directamente
- Si necesitás configuración rápida y soporte de archivos estáticos como en Apache o Nginx
- Para apps web complejas sin usar un framework (Express.js es mucho más práctico)
- Para tareas CPU intensivas (como compresión de video, cifrado fuerte, etc.)