Inicio > Cursos > Node.js y Express > EventEmitter y Process
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.
← Streams y BuffersServidor HTTP Nativo →

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