Bienvenidos sean a este post, hoy continuaremos con los registros.
En el post anterior vimos un poco de como es la depuracion para ver de mejor forma las actividades de nuestra aplicacion, pero en el post de hoy nos centraremos en dos salidas donde tambien tendremos informacion importante, estas son:
- process.stdout
- process.stderr
Al ser parte del sistema una buena practica para capturar estas stream de salida mediante alguna facilidad del sistema, pero tenemos una buena noticia porque el codigo de Javascript corriendo en node.js puede interceptar estos dos streams, si bien tenemos varias posibilidades una de ellas es capture-console, este paquete nos permite interceptar cualquier stream grabable mediante una funcion callback, para mas informacion les dejo la pagina del paquete:
https://www.npmjs.com/package/capture-console
Pero veamos como trabaja por fuera de nuestra aplicacion, para ello primero debemos instalarlo en nuestro equipo y para ello ejecutaremos el siguiente comando:
$ npm install --save-dev capture-console
Una vez instalado nuestro siguiente paso sera abrir a node en modo interprete:
$ node
Welcome to Node.js v16.20.2.
Type ".help" for more information.
>
Lo primero que haremos sera crear un objeto de este paquete:
> var capcon = require('capture-console');
Con nuestro objeto creado lo siguiente sera definir una variable vacia:
> var salida='';
En esta almacenaremos el resultado de interceptar la salida de nuestro paquete, lo siguiente sera iniciarlo y para ello deben hacer lo siguiente:
> capcon.startCapture(process.stdout, function(stdout) {
... salida += stdout;
... });
true
>
Escriben la primera que se encarga de iniciarlo mediante esa funcion, primero indicaremos cual stream capturaremos, luego definimos una funcion, presionan Enter y les permitire ingresar la segunda linea donde todo lo que intercepte la funcion y este en stdout lo iremos agregando a la variable salida, presionen Enter nuevamente y cierren la funcion, esto devolvera un true y comenzara a interceptar todo lo que escibamos en el prompt, despues de ingresar varias cosas ejecutaremos lo siguiente:
> capcon.stopCapture(process.stdout);
true
>
Este se encargara de detener la captura y debemos informarle cual stream, si esta todo bien nos devuelve un true y finaliza la captura, ahora podemos ver cual es el resultado almacenado en salida y para ello ejecuten un console.log a esta variable, les muestro como fue mi salida:
> console.log("Prueba");
Prueba
undefined
> 4 * 4
16
> capcon.stopCapture(process.stdout);
true
> console.log(salida);
true
> 2 + 2
4
> console.log("Prueba");
Prueba
undefined
> 4 * 4
16
> capcon.stopCapture(process.stdout);
undefined
>
Como pueden ver almaceno todo lo que fui escribiendo con sus resultados en el prompt del interprete hasta que lo detuve y no me devolvio el ultimo valor, esta fue la mejor forma que se me ocurrio para mostrar como trabaja pero si puedo implementarlo en alguna aplicacion lo veremos en accion, continuemos con este post donde hablaremos sobre dos temas.
Capturando excepciones sin capturar y promesas rechazadas sin capturar
Estas dos areas pueden contener informacion que puede perderse, suponiendo que nuestro codigo captura todos los errores aquellos errores sin capturar son un error pero de parte nuestra, dado que puede perderse informacion importantes en estos, aqui node.js indica estas condiciones con eventos enviados por el objeto process, uncaughtException y unhandledRejection, si nos referimos a la documentacion de node.js que ante esta situacion la aplicacion se encuentra en una situacion desconocida porque la aplicacion fallo y no puede ser seguro seguir corriendola, para entender esto vamos a ir a nuestra aplicacion Notas sino la tienen les dejo un link para descargarla:
Una vez desscargado el archivo simplemente extraigan el directorio en el PC y ya tenemos la aplicacion habilitada para trabajar, nuestro primer paso sera ir al archivo appsupport.mjs y agregaremos primero este bloque de codigo:
process.on('uncaughtException', function(err) {
console.error(`Me mori!!! - ${(err.stack || err)}`);
}
En este caso monitoreamos al proceso y ante una identificacion como uncaughtException la interceptaremos y en la parte de error (no de log) mostraremos el mensaje indicando que fallo y luego el error de pila o error en si, nuestro siguiente cambio sera agregar en el comienzo del archivo junto con los paquetes que importamos la siguiente linea:
import * as util from 'util';
La cual nos importara el paquete util para nuestro modulo, lo siguiente sera agregar en el mismo archivo el siguiente bloque de codigo:
process.on('unhandledRejection', (reason, p) => {
console.error(`Rechazo sin manejar en: ${util.inspect(p)} razon: ${reason}`);
});
Este es similar al anterior pero monitorea las promesas rechazadas sin manejar, y en este caso indicaremos cual es mediante uno de los valores interceptados y para ello necesitamos la funcion inspect de util, por eso debimos importarla al comienzo, y luego mostraremos el indicador de la razon, esto en conjunto con los posts anteriores hemos logrado tener una mejor visualizacion de nuestros registros y por ende de nuestros errores, si bien este ultimo es para algunos casos particulares siempre deben tenerlo porque pueden suceder, antes de finalizar les dejo el archivo con todos los codigos de nuestra aplicacion hasta ahora:
En resumen, hoy hemos visto como capturar todo lo pase por los streams grabables mediante el paquete capture-console, de una forma muy basica, despues vimos dos tipos de excepciones que se pueden escapar de nuestro scope de intercepcion de errores/excepciones, y luego las implementamos en nuestra aplicacion, todo esto y lo anterior lo hemos realizado para tener todo preparado para lo que sigue como es tener donde almancenar nuestras notas, espero les haya sido de utilidad sigueme en tumblr, Twitter o Facebook para recibir una notificacion cada vez que subo un nuevo post en este blog, nos vemos en el proximo post.


Donación
Es para mantenimento del sitio, gracias!
$1.50
