💚 ¿Qué es Node.js?
📖 Definición
Node.js es un entorno de ejecución de JavaScript construido sobre el motor V8 de Chrome. Permite la ejecución de JavaScript fuera de los navegadores con arquitectura asíncrona basada en eventos para alto rendimiento y escalabilidad. Proporciona un vasto ecosistema de bibliotecas a través de npm (Node Package Manager).
🎯 Analogía simple
Cocina de restaurante
Servidor tradicional (Síncrono)
└─ Un chef atiende clientes uno por uno (lento)
Node.js (Asíncrono)
├─ Un chef maneja múltiples pedidos simultáneamente
├─ Mientras cocina bistec → prepara ensalada
└─ ¡Rápido y eficiente!
⚙️ Bucle de eventos
┌─────────────┐
│ Call Stack │ Código en ejecución
└──────┬──────┘
│
┌──────▼──────┐
│ Event Loop │ Coordinador
└──────┬──────┘
│
┌────┴─────┐
│ │
Microtask Task Queue
(Promise) (setTimeout)
💡 Ejemplos clave
Servidor HTTP básico
const http = require('http');
const server = http.createServer((req, res) => {
res.writeHead(200, { 'Content-Type': 'text/html' });
res.end('<h1>¡Hola, Node.js!</h1>');
});
server.listen(3000, () => {
console.log('Servidor ejecutándose en http://localhost:3000');
});
API Express
const express = require('express');
const app = express();
app.use(express.json());
app.get('/api/users', (req, res) => {
res.json([
{ id: 1, name: 'Juan' },
{ id: 2, name: 'María' }
]);
});
app.post('/api/users', (req, res) => {
const newUser = req.body;
res.status(201).json({ message: 'Creado', user: newUser });
});
app.listen(3000);
Async/Await
const fs = require('fs').promises;
// ❌ Secuencial (lento)
async function readSequential() {
const file1 = await fs.readFile('file1.txt');
const file2 = await fs.readFile('file2.txt');
// Total: 200ms
}
// ✅ Paralelo (rápido)
async function readParallel() {
const [file1, file2] = await Promise.all([
fs.readFile('file1.txt'),
fs.readFile('file2.txt')
]);
// Total: 100ms (concurrente)
}
Integración de base de datos
const express = require('express');
const mysql = require('mysql2/promise');
const pool = mysql.createPool({
host: 'localhost',
user: 'root',
password: 'password',
database: 'mydb'
});
app.get('/api/users', async (req, res) => {
try {
const [rows] = await pool.execute('SELECT * FROM users');
res.json(rows);
} catch (error) {
res.status(500).json({ error: 'Error de base de datos' });
}
});
🤔 Preguntas frecuentes
Q1. ¿Por qué Node.js es rápido?
// E/S no bloqueante
readFile('file.txt', (err, data) => {
processData(data);
});
// ¡Puede manejar otras solicitudes mientras lee!
// Basado en eventos
// Un solo hilo maneja miles de conexiones
// Sin sobrecarga de cambio de contexto
Q2. ¿Qué es npm?
# Gestor de paquetes para Node.js
npm install express # Instalar paquete
npm init -y # Inicializar proyecto
npm list # Listar paquetes instalados
npm audit # Verificación de seguridad
# package.json
{
"dependencies": {
"express": "^4.18.0"
}
}
Q3. ¿CommonJS vs Módulos ES?
// CommonJS (tradicional)
const { add } = require('./math');
module.exports = { add };
// Módulos ES (moderno)
import { add } from './math.js';
export function add(a, b) { return a + b; }
// Habilitar en package.json
{ "type": "module" }
🎬 Resumen
- E/S asíncrona: Alto rendimiento y escalabilidad
- JavaScript: Mismo lenguaje que frontend
- npm: Vasto ecosistema de paquetes
- Bucle de eventos: Procesamiento concurrente eficiente
¡Conviértete en desarrollador full-stack con Node.js! 💚