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