Node.js
Node.js es un entorno de ejecución de JavaScript construido sobre el motor V8 de Chrome que permite ejecutar JavaScript en el servidor.
¿Qué es Node.js?
Imagina que JavaScript fuera un idioma que solo se pudiera hablar en ciertos lugares (navegadores web). Node.js es como darle a JavaScript un pasaporte para que pueda "viajar" y ejecutarse en cualquier computadora.
Node.js es un entorno que permite ejecutar JavaScript fuera del navegador, especialmente en servidores. Esto significa que puedes usar el mismo lenguaje que conoces del frontend para construir backends, APIs y aplicaciones de escritorio.
Node.js te permite:
- Un solo lenguaje - JavaScript tanto en frontend como backend
- Ecosistema gigante - NPM tiene más de un millón de paquetes disponibles
- Alto rendimiento - Especialmente bueno para aplicaciones en tiempo real
- Desarrollo rápido - Prototipa y desarrolla aplicaciones velocmente
- Comunidad activa - Miles de desarrolladores contribuyen constantemente
Node.js revolucionó el desarrollo web porque eliminó la necesidad de aprender lenguajes diferentes para frontend y backend. Es como tener una herramienta universal que funciona en cualquier parte de tu aplicación.
Instalación y Uso
# Verificar instalación
node --version
npm --version
# Ejecutar archivo
node app.js
# Modo interactivo (REPL)
node
Servidor Básico
// app.js
const http = require('http');
const fs = require('fs');
const path = require('path');
const server = http.createServer((req, res) => {
res.writeHead(200, { 'Content-Type': 'text/html' });
res.end('<h1>Hola desde Node.js!</h1>');
});
const PORT = process.env.PORT || 3000;
server.listen(PORT, () => {
console.log(`Servidor corriendo en puerto ${PORT}`);
});
Módulos Core
// Sistema de archivos
const fs = require('fs');
// Leer archivo asíncrono
fs.readFile('archivo.txt', 'utf8', (err, data) => {
if (err) throw err;
console.log(data);
});
// Leer archivo síncrono
const contenido = fs.readFileSync('archivo.txt', 'utf8');
// Path utilities
const path = require('path');
const rutaCompleta = path.join(__dirname, 'archivos', 'config.json');
// Sistema operativo
const os = require('os');
console.log('Plataforma:', os.platform());
console.log('Arquitectura:', os.arch());
NPM (Node Package Manager)
# Inicializar proyecto
npm init -y
# Instalar dependencias
npm install express
npm install -D nodemon # Dependencia de desarrollo
# Scripts en package.json
{
"scripts": {
"start": "node app.js",
"dev": "nodemon app.js",
"test": "jest"
}
}
# Ejecutar scripts
npm start
npm run dev
Express.js Framework
const express = require('express');
const app = express();
// Middleware
app.use(express.json());
app.use(express.static('public'));
// Rutas
app.get('/', (req, res) => {
res.json({ mensaje: 'Hola mundo' });
});
app.get('/usuarios/:id', (req, res) => {
const { id } = req.params;
res.json({ usuario: `Usuario ${id}` });
});
app.post('/usuarios', (req, res) => {
const nuevoUsuario = req.body;
// Lógica para crear usuario
res.status(201).json(nuevoUsuario);
});
app.listen(3000, () => {
console.log('Servidor Express en puerto 3000');
});
Manejo de Asincronía
// Callbacks
fs.readFile('archivo.txt', (err, data) => {
if (err) return console.error(err);
console.log(data.toString());
});
// Promises
const { promisify } = require('util');
const readFileAsync = promisify(fs.readFile);
readFileAsync('archivo.txt', 'utf8')
.then(data => console.log(data))
.catch(err => console.error(err));
// Async/Await
async function leerArchivo() {
try {
const data = await readFileAsync('archivo.txt', 'utf8');
console.log(data);
} catch (error) {
console.error(error);
}
}
Event Emitter
const EventEmitter = require('events');
class MiEmitter extends EventEmitter {}
const emisor = new MiEmitter();
// Escuchar eventos
emisor.on('mensaje', (data) => {
console.log('Evento recibido:', data);
});
// Emitir eventos
emisor.emit('mensaje', 'Hola desde el emisor');
Variables de Entorno
// Usando dotenv
require('dotenv').config();
const PORT = process.env.PORT || 3000;
const DB_URL = process.env.DATABASE_URL;
const API_KEY = process.env.API_KEY;
console.log('Configuración:', {
puerto: PORT,
entorno: process.env.NODE_ENV
});
Relacionado
- JavaScript - Lenguaje base
- Express - Framework web
- NPM - Gestor de paquetes
- API - Creación de APIs
- MongoDB - Base de datos popular con Node
- TypeScript - Node con tipado