Node.js y ExpressNode.js CoreLección 4 de 20
EventEmitter y Process
EventEmitter es la clase base del patrón observer en Node.js. Casi todo en Node hereda de ella: servidores HTTP, streams, sockets. Te permite crear sistemas de eventos personalizados con on(), emit() y once(). El objeto process expone información sobre el proceso actual.
const { EventEmitter } = require('events');
const os = require('os');
const { exec } = require('child_process');
// Clase personalizada que hereda EventEmitter
class BaseDeDatos extends EventEmitter {
constructor() {
super();
this.conectado = false;
}
conectar() {
setTimeout(() => {
this.conectado = true;
this.emit('conectado', { host: 'localhost', tiempo: Date.now() });
}, 1000);
}
query(sql) {
if (!this.conectado) {
this.emit('error', new Error('No conectado a la BD'));
return;
}
this.emit('query', { sql, timestamp: Date.now() });
}
}
const db = new BaseDeDatos();
db.on('conectado', (info) => console.log('BD conectada:', info.host));
db.once('error', (err) => console.error('Error:', err.message)); // solo se ejecuta una vez
db.on('query', ({ sql }) => console.log('Ejecutando:', sql));
db.conectar();
// process — información del proceso Node
console.log('PID:', process.pid);
console.log('Directorio:', process.cwd());
console.log('Plataforma:', process.platform); // 'linux', 'darwin', 'win32'
console.log('Args:', process.argv.slice(2)); // argumentos CLI
// os — información del sistema operativo
console.log('CPUs:', os.cpus().length);
console.log('RAM total:', (os.totalmem() / 1e9).toFixed(1) + 'GB');
console.log('RAM libre:', (os.freemem() / 1e9).toFixed(1) + 'GB');
// Ejecutar comando del sistema
exec('node --version', (err, stdout) => {
if (!err) console.log('Node version:', stdout.trim());
});
ConsejoUsa once() en lugar de on() cuando solo necesitas escuchar un evento una vez (como "conectado"). Si usas on() y el evento se emite múltiples veces, tu handler se ejecutará múltiples veces.
Practica esta lección
Resuelve los ejercicios del curso de Node.js y Express en la app, gratis y con corrección automática.
Empezar a practicar