1. JavaScript fuera del Navegador

Durante años, JavaScript estuvo atrapado dentro de Chrome y Firefox. En 2009, Ryan Dahl tuvo una idea loca: "Arrancar" el motor V8 de Chrome, envolverlo en C++, y ejecutarlo directamente en el servidor.

Así nació Node.js.
No es un nuevo lenguaje. Es un entorno de ejecución (Runtime). Te permite usar el mismo JS que ya sabes para construir servidores, leer archivos del disco duro, y crear APIs.

2. El Event Loop (El Camarero)

A diferencia de otros (como PHP o Java antiguo) que crean un "hilo" nuevo por cada usuario (lo que consume mucha memoria), Node.js es Single-Threaded (un solo hilo).

La Analogía del Camarero:
Un solo camarero (Node) atiende 10 mesas. Toma la orden de la mesa 1, se la da a la cocina, y va INMEDIATAMENTE a la mesa 2. No se queda esperando a que el cocinero termine la hamburguesa.
Esto lo hace increíblemente rápido para aplicaciones con mucho tráfico (I/O intensivo) como chats o streaming.

Evaluación 1: Arquitectura

¿Para qué tipo de tareas NO es bueno Node.js?

Procesamiento pesado de CPU (Cálculos matemáticos complejos, edición de video). Bloquearía al único camarero.
Aplicaciones de Chat en tiempo real.
APIs REST.

3. NPM: La tienda de legos

NPM (Node Package Manager) es el registro de software más grande del mundo.

¿Necesitas encriptar contraseñas? Ya existe un paquete (`bcrypt`). ¿Manejar fechas? (`date-fns`). ¿Conectarte a una base de datos?
No reinventes la rueda. Instala piezas y construye tu castillo.

npm install express

4. Módulos: CommonJS vs ES Modules

Node organiza el código en ficheros separados llamados módulos.

Antiguo (CommonJS):

const http = require('http');
Moderno (ES Modules - Lo que usamos hoy):
import http from 'http';
Permite mantener tu código limpio y separado por responsabilidades.

5. Tu primer Servidor HTTP

Node trae un módulo nativo `http`.

import http from 'http';

const server = http.createServer((req, res) => {
    // req: Request (Lo que pide el usuario)
    // res: Response (Lo que respondemos)
    res.write('¡Hola desde el servidor!');
    res.end();
});

server.listen(3000);
console.log('Servidor corriendo en puerto 3000');
Si entras a `localhost:3000` en tu navegador, verás el mensaje. ¡Acabas de crear un backend!

Evaluación 2: Servidores

¿Qué significa 'listen(3000)'?

Que el servidor escuche 3000 usuarios a la vez.
Que el servidor se quede esperando peticiones en el puerto lógico 3000 de tu computadora.

6. File System (fs)

En el navegador, JS no puede leer tus archivos por seguridad. En Node, TIENE PODER TOTAL.

import fs from 'fs/promises';

// Leer un archivo de texto
const texto = await fs.readFile('./secreto.txt', 'utf-8');
console.log(texto);
Esto es útil para leer configuraciones, procesar imágenes, o crear herramientas de línea de comandos.

7. Express.js: El Framework

El módulo `http` nativo es muy básico. Para aplicaciones reales, usamos Express.
Es minimalista, flexible y es el estándar de la industria.

import express from 'express';
const app = express();

app.get('/', (req, res) => {
    res.send('Bienvenidos a mi API con Express');
});

app.listen(3000);
Mucho más limpio, ¿verdad?

8. Routing (Rutas)

Routing es decidir qué código ejecutar según la URL que visita el usuario.

app.get('/usuarios', (req, res) => {
    // Devolver lista de usuarios
});

app.post('/usuarios', (req, res) => {
    // Crear un usuario nuevo
});

app.delete('/usuarios/:id', (req, res) => {
    // Borrar usuario específico
});
Esto es la base de una REST API.

Evaluación 3: Métodos HTTP

¿Qué método HTTP se usa convencionalmente para CREAR datos nuevos?

GET
POST
DELETE

10. Middleware

El concepto más poderoso de Express.
Son funciones que se ejecutan "en medio" de la petición.
Usuario pide datos -> **Middleware (Verifica si está logueado)** -> Código final.
Si el middleware dice "No pasa", la petición se detiene ahí.

10. Variables de Entorno (.env)

NUNCA subas contraseñas a GitHub.
Usamos un archivo `.env` que se queda en tu servidor y una librería `dotenv` para leerlo.

DB_PASSWORD=secreto123
PORT=8080
const dbPass = process.env.DB_PASSWORD;

11. Bases de Datos

Node se lleva bien con todos.
SQL (Postgres, MySQL): Usamos ORMs como Prisma o Sequelize para interactuar con tablas.
NoSQL (MongoDB): Usamos Mongoose. Es muy popular con Node (MERN Stack) porque guardas los datos como objetos JSON, que es nativo para JS.

¡Backend Desbloqueado!

Ya sabes crear servidores, APIs y leer archivos.

Con HTML/CSS/JS haces la cara bonita. Con Node haces el cerebro lógico.
Para dominar la interfaz moderna compleja, necesitamos una herramienta más especializada que JS vainilla. Necesitamos React.