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?
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)'?
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?
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.