Saltar al contenido principal

💚 ¿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! 💚