Los eventos en NodeJS, cómo se implementan y qué características tienen los eventos Javascript del lado del servidor.
En el Manual de NodeJS hemos presentado ya informaciones bastante amplias para empezar a dar los primeros pasos con esta plataforma de desarrollo. Aún nos quedan muchas cosas importantes y básicas por conocer, como los eventos.
En este artículo explicaremos qué son los eventos del lado del servidor y cómo se implementan en Node.JS. Por si os interesa, es importante comentar que este texto está extractado del segundo programa #nodeIO emitido en directo en DesarrolloWeb.com por Alejandro Morales y Miguel Angel Alvarez: #nodeIO eventos, streams y más.
Eventos del lado del servidor con Javascript
Lo primero que debemos entender es qué son eventos del lado del servidor, que no tienen nada que ver con los eventos Javascript que conocemos y utilizamos en las aplicaciones web del lado del cliente. Aquí los eventos se producen en el servidor y pueden ser de diversos tipos dependiendo de las librerías o clases que estemos trabajando.
Para hacernos una idea más exacta, pensemos por ejemplo en un servidor HTTP, donde tendríamos el evento de recibir una solicitud. Por poner otro ejemplo, en un stream de datos tendríamos un evento cuando se recibe un dato como una parte del flujo.
Módulo de eventos
Los eventos se encuentran en un módulo independiente que tenemos que requerir en nuestros programas creados con Node JS. Lo hacemos con la sentencia "require" que conocimos en artículos anteriores cuando hablábamos de módulos.
var eventos = require('events');
Dentro de esta librería o módulo tienes una serie de utilidades para trabajar con eventos.
Veamos primero el emisor de eventos, que encuentras en la propiedad EventEmitter.
var EmisorEventos = eventos.EventEmitter;
Cómo definir un evento en NodeJS
En "Node" existe un bucle de eventos, de modo que cuando tú declaras un evento, el sistema se queda escuchando en el momento que se produce, para ejecutar entonces una función. Esa función se conoce como "callback" o como "manejador de eventos" y contiene el código que quieres que se ejecute en el momento que se produzca el evento al que la hemos asociado.
Primero tendremos que "instanciar" un objeto de la clase EventEmitter, que hemos guardado en la variable EmisorEventos en el punto anterior de este artículo.
var ee = new EmisorEventos();
Luego tendremos que usar el método on() para definir las funciones manejadoras de eventos, o su equivalente addEventListener(). Para emitir un evento mediante código Javascript usamos el método emit().
Por ejemplo, voy a emitir un evento llamado "datos", con este código.
ee.emit('datos', Date.now());
Ahora voy a hacer una función manejadora de eventos que se asocie al evento definido en "datos".
ee.on('datos', function(fecha){
console.log(fecha);
});
Si deseamos aprovechar algunas de las características más interesantes de aplicaciones NodeJS quizás nos venga bien usar setInterval() y así podremos estar emitiendo datos cada cierto tiempo:
setInterval(function(){
ee.emit('datos', Date.now());
}, 500);
Código completo del ejemplo de eventos y ejecución
Con esto ya habremos construido un ejemplo NodeJS totalmente funcional. El código completo sería el siguiente:
var eventos = require('events');
var EmisorEventos = eventos.EventEmitter;
var ee = new EmisorEventos();
ee.on('datos', function(fecha){
console.log(fecha);
});
setInterval(function(){
ee.emit('datos', Date.now());
}, 500);
Esto lo podemos guardar como "eventos.js" o con cualquier otro nombre de archivos que deseemos. Lo guardamos en el lugar que queramos de nuestro disco duro.
Para ponerlo en ejecución nos vamos en línea de comandos hasta la carpeta donde hayamos colocado el archivo "eventos.js" o como quiera que lo hayas llamado y escribes el comando:
node eventos.js
Como resultado, veremos que empiezan a aparecer líneas en la ventana del terminal del sistema operativo, con un número, que es el "timestamp" de la fecha de cada instante inicial. Puedes salir del programa pulsando las teclas CTRL + c.
Por si te lía esto de ejecutar archivos por medio de la línea de comando, a continuación puedes ver una pantalla del terminal donde hemos puesto en marcha este pequeño ejercicio de eventos.
Conclusión
Con esto hemos podido obtener una primera aproximación a lo que son los eventos en NodeJS y la manera de crear esas funciones "callback" para ejecutar cuando se producen, también llamadas manejadores de eventos.
En los siguientes capítulos pasaremos a hablaros de los streams, que son bastante más importantes en el mundo de Node.JS.
Alejandro Morales Gámez
Desarrollador web, especialista en JavaScript, Node.js, lua y Ruby.