Node.js y sus módulos nativos
Cada aplicación que realicemos en node.js puede hacer uso de una infinidad de módulos de terceros que encontramos en npm, sin embargo también debemos saber que al instalar node.js éste ya cuenta con algunos módulos muy útiles.
Así que el objetivo de este POST es brindar una breve descripción para hacernos una idea de que podemos hacer sin quebrarnos la cabeza buscando otros módulos.
Cluster
Node.js se ejecuta sobre un solo hilo, así que nos puede saltar la duda “si mi equipo tiene múltiples núcleos, ¿cómo puedo aprovecharlos al máximo?”.
Pues bien, aquí es donde podemos utilizar el módulo cluster. En pocas palabras, lo que este módulo hará es hacer un “fork” de nuestro proceso por cada uno de los núcleos que tengamos disponibles.
Una gran ventaja es que podemos identificar cuando uno de los procesos se detenga y recuperarlo, esto es un gran beneficio a comparación de ejecutar el servicio en un solo proceso, ya que, en éste otro escenario, si el servicio se detiene no podrá recuperarse.
Una desventaja es que se debe controlar mejor la información que se debe compartir entre los procesos, por ejemplo la información de la sesiones que inician los usuarios. Sin embargo no todo son malas noticias, ya que para sanar esta desventaja podemos hacer uso de otros módulos (de terceros) como strong-store-cluster, que nos brinda una colección (“key/value”) accesible desde todos los procesos que tengamos en ejecución.
TAMBIÉN PUEDES LEER: Documentación Oficial (en inglés) de éste módulo
Console
Es una instancia al objeto console similar al que tienen los navegadores web, muy útil si queremos ver en consola alguna salida, pero esta funcionalidad siento que se queda corta y hay módulos que son aún más completos como por ejemplo: winston o morgan que ya vienen configurables y permiten hacer cosas como “guardar el log en una ubicación del disco duro”.
TAMBIÉN PUEDES LEER: Documentación Oficial (en inglés) de éste módulo
DNS
Permite resolver nombres de dominio, cuenta con una función lookup que funciona sin que necesariamente exista conexión de red en nuestro equipo (resolviendo por medio del sistema operativo y buscando el nombre del host en el archivo de hosts).
También permite resolver a nivel de DNS, podemos buscar ya sea por:
- IPv4
- IPv6
- Registros MX
- Registros TXT
- Registros RSV
- Registros SOA
- Registros NS
- Registros CNAME
También puede retornar la lista de servidores que utilizó para resolver.
TAMBIÉN PUEDES LEER: Documentación Oficial (en inglés) de éste módulo
Events
Muchos módulos en node.js emiten ciertos eventos, por ejemplo: cuando se abre una nueva conexión a través de HTTP o cuando se abre un archivo del disco duro, así que este módulo nos permite hacer algo cada vez que se disparen dichos eventos.
Nosotros también podemos emitir eventos, por ejemplo: si deseo que me llegue una notificación cada vez que un usuario intente ver una página a la que no tiene acceso, ¿cómo puedo lograrlo?.
Para este caso, puedo crear un evento que me envíe una notificación (un correo o lo que sea) y cada vez que un usuario intente ver una página sin autorización se manda a ejecutar el evento programado.
TAMBIÉN PUEDES LEER: Documentación Oficial (en inglés) de éste módulo
File System
No hay mucho que explicar de éste módulo, nos permite acceder al sistema de archivos del sistema operativo, crear y renombrar carpetas, acceder y escribir archivos, etc.
TAMBIÉN PUEDES LEER: Documentación Oficial (en inglés) de éste módulo
HTTP y HTTPS
Diseñados para abrir un puerto y escuchar las peticiones del cliente a través de los protocolos HTTP y HTTPS, generalmente manejamos dos variables: request (que contiene la información que ha sido posteada al servidor por parte del usuario) y response (que nos servirá para enviar la respuesta al cliente).
En el ejemplo más simple podemos levantar un servicio http, que nos responda “Hello Word”, acá dejo el código para esto:
const http = require('http'); const hostname = '127.0.0.1'; const port = 1337; http.createServer(function(req, res) { res.writeHead(200, { 'Content-Type': 'text/plain' }); res.end('Hello Worldn'); }).listen(port, hostname, function() { console.log('Server running at http:' + hostname + ':' + port); });
Pero ya en la práctica necesitaremos enrutar de alguna forma las peticiones para que entendamos que es lo que nos pide el cliente, por ejemplo: si el cliente consulta una página, una imagen, un archivo css, etc.
Espero poder profundizar en estos dos módulos más adelante, ya que necesitaré más de un POST para hacerlo.
TAMBIÉN PUEDES LEER: Documentación Oficial (en inglés) de éste módulo
OS
Nos permite obtener información del sistema operativo en donde estamos ejecutando node, como por ejemplo: nombre del equipo, plataforma, información sobre cada CPU/Core instalado, interfaces de red disponibles, etc.
TAMBIÉN PUEDES LEER: Documentación Oficial (en inglés) de éste módulo
QueryString
Nos ofrece utilidades para manipular los parámetros que viajan en las URL de nuestros sitios, por ejemplo: si necesitamos convertir un objeto json a string para enviarlo como parámetro, o viceversa, parsear un string para manipularlo como objeto json.
TAMBIÉN PUEDES LEER: Documentación Oficial (en inglés) de éste módulo
1 Respuesta
[…] Me ha llamado la atención los módulos que ya nos ofrece node.js, por ese motivo estaré publicando un post más: NODE.JS Y SUS MÓDULOS NATIVOS. […]