Anuncios

Bienvenidos sean a este post, hoy continuaremos con los registros.

Anuncios

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
Anuncios
Anuncios

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

Anuncios

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
Anuncios

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.
>
Anuncios

Lo primero que haremos sera crear un objeto de este paquete:

> var capcon = require('capture-console');
Anuncios

Con nuestro objeto creado lo siguiente sera definir una variable vacia:

> var salida='';
Anuncios

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
>
Anuncios
Anuncios

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
>
Anuncios

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
>
Anuncios

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.

Anuncios

Capturando excepciones sin capturar y promesas rechazadas sin capturar

Anuncios

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:

Anuncios

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)}`);
}
Anuncios

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';
Anuncios

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}`);
});
Anuncios
Anuncios

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:

Anuncios

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.

Anuncios

Donación

Es para mantenimento del sitio, gracias!

$1.50