Cómo utilizar la consola en Node.js

Introducción
En este artículo, aprenderemos cómo utilizar la mayoría de los métodos disponibles en la console
clase Node.js de manera más efectiva.
Prerrequisitos
Este tutorial fue verificado con el navegador Chrome versión 70.0.3538.77 y Node.js versión 8.11.3.
Usando console.log, console.info, yconsole.debug
El console.log
método imprime en la salida estándar, ya sea la terminal o la consola del navegador. Genera cadenas de manera predeterminada, pero se puede utilizar junto con cadenas de plantilla para modificar lo que devuelve.
console.log(string, substitution)
console.info
y console.debug
los métodos son idénticos a console.log en su funcionamiento.
Puedes usarlo console.debug
en la consola del navegador Firefox de forma predeterminada, pero para usarlo en Chrome, tendrás que configurar el nivel de registro en Verbose activándolo en el menú Todos los niveles .
Los argumentos en la cadena de plantilla se pasan a util.format
, que luego procesa los argumentos reemplazando cada token de sustitución con el valor convertido respectivo.
Los tokens de sustitución admitidos son:
%s
const msg = `Using the console class`;console.log('%s', msg);console.log(msg);
Este código generaría el siguiente resultado:
OutputUsing the console classUsing the console class
%s
es el patrón de sustitución predeterminado.
%d, %f, %i,%o
const circle = (radius = 1) = { const profile = {}; const pi = 22/7; profile.diameter = 2 * pi * radius; profile.circumference = pi * radius * 2; profile.area = pi * radius * 2; profile.volume = 4/3 * pi * radius^3; console.log('This circle has a radius of: %d cm', radius); console.log('This circle has a circumference of: %f cm', profile.diameter); console.log('This circle has an area of: %i cm^2', profile.area); console.log('The profile of this cirlce is: %o', profile); console.log('Diameter %d, Area: %f, Circumference %i', profile.diameter, profile.area, profile.circumference)}circle();
Este código generaría el siguiente resultado:
OutputThis circle has a radius of: 1 cmThis circle has a circumference of: 6.285714285714286 cmThis circle has an area of: 6 cm^2The profile of this cirlce is: {diameter: 6.285714285714286, circumference: 6.285714285714286, area: 6.285714285714286, volume: 7}Diameter 6, Area: 6.285714285714286, Circumference 6
%d
será sustituido por un dígito (entero o flotante).%f
será reemplazado por un valor flotante.%i
será reemplazado por un entero.%o
será reemplazado por un Objeto.
%o
es especialmente útil porque no tenemos que usarlo JSON.stringify
para expandir nuestro objeto porque muestra todas las propiedades del objeto por defecto.
Tenga en cuenta que puede utilizar tantas sustituciones de tokens como desee. Se reemplazarán en el mismo orden que los argumentos que pase.
%c
Este token de sustitución aplica estilos CSS al texto sustituido.
console.log('LOG LEVEL: %c OK', 'color: green; font-weight: normal');console.log('LOG LEVEL: %c PRIORITY', 'color: blue; font-weight: medium');console.log('LOG LEVEL: %c WARN', 'color: red; font-weight: bold');console.log('ERROR HERE');
Este código generaría el siguiente resultado:
El texto que pasamos console.log
después del %c
token de sustitución se ve afectado por los estilos, pero el texto anterior se deja como está sin estilo.
Usandoconsole.table
El primer argumento que se le pasa son los datos que se devolverán en forma de tabla. El segundo es una matriz de columnas seleccionadas que se mostrarán.
console.table(tabularData, [properties])
Este método imprimirá la entrada que se le pase formateada como una tabla y luego registrará el objeto de entrada después de la representación de la tabla.
Matrices
Si se le pasa una matriz como datos, cada elemento de la matriz será una fila en la tabla.
const books = ['The Silmarillion', 'The Hobbit', 'Unfinished Tales'];console.table(books);
En una matriz simple con una profundidad de 1, la primera columna de la tabla tiene el índice de encabezado. Debajo del encabezado de índice de la primera columna se encuentran los índices de la matriz y los elementos de la matriz se enumeran en la segunda columna, debajo del encabezado de valor.
Esto es lo que sucede con una matriz anidada:
const authorsAndBooks = [['Tolkien', 'Lord of The Rings'],['Rutger', 'Utopia For Realists'], ['Sinek', 'Leaders Eat Last'], ['Eyal', 'Habit']];console.table(authorsAndBooks);
Objetos
Para los objetos con una profundidad de 1, las claves del objeto se enumerarán debajo del encabezado del índice y los valores del objeto debajo del encabezado de la segunda columna.
const inventory = { apples: 200, mangoes: 50, avocados: 300, kiwis: 50 };console.table(inventory);
Para objetos anidados:
const forexConverter = { asia: { rupee: 1.39, renminbi: 14.59 , ringgit: 24.26 }, africa: { rand: 6.49, nakfa: 6.7 , kwanza:0.33 }, europe: { swissfranc: 101.60, gbp: 130, euro: 115.73 } };console.table(forexConverter);
Algunos objetos más anidados,
const workoutLog = { Monday: { push: 'Incline Bench Press', pull: 'Deadlift'}, Wednesday: { push: 'Weighted Dips', pull: 'Barbell Rows'}};console.table(workoutLog);
Aquí, especificamos que solo queremos ver los datos bajo la columna push.
console.table(workoutLog, 'push');
Para ordenar los datos de una columna, simplemente haga clic en el encabezado de la columna.
Bastante útil, ¿verdad?
¡Intenta pasar console.table
un objeto con algunos valores como matrices!
Usandoconsole.dir
El primer argumento que se pasa a esta función es el objeto que se va a registrar, mientras que el segundo es un objeto que contiene opciones que definirán cómo se formateará la salida resultante o qué propiedades del objeto se mostrarán.
Lo que se devuelve es un objeto formateado por la función util.inspect del nodo.
Los objetos anidados o secundarios dentro del objeto de entrada se pueden expandir mediante triángulos de divulgación.
console.dir(object, options);// where options = { showHidden: true ... }
Veamos esto en acción.
const user = { details: { name: { firstName: 'Immanuel', lastName: 'Kant' }, height: `1.83m"`, weight: '90kg', age: '80', occupation: 'Philosopher', nationality: 'German', books: [ { name: 'Critique of Pure Reason', pub: '1781', }, { name: 'Critique of Judgement', pub: '1790', }, { name: 'Critique of Practical Reason', pub: '1788', }, { name: 'Perpetual Peace', pub: '1795', }, ], death: '1804' }}console.dir(user);
Aquí está en la consola de Chrome.
Usandoconsole.dirxml
Esta función generará un árbol interactivo del XML/HTML que se le pasa. De manera predeterminada, se utiliza un objeto Javascript si no es posible generar el árbol de nodos.
console.dirxml(object|nodeList);
Al igual que console.dir
, el árbol renderizado se puede expandir haciendo clic en los triángulos de divulgación dentro de los cuales se pueden ver los nodos secundarios.
Su salida es similar a la que encontramos en la pestaña Elementos del navegador.
Así es como se ve cuando pasamos algo de HTML desde una página de Wikipedia.
const toc = document.querySelector('#toc');console.dirxml(toc);
Pasemos algo de HTML desde una página de este sitio web.
console.dirxml(document)
Así es como se ve cuando pasamos un objeto.
¡Prueba a llamar console.dir
a algún HTML y mira qué sucede!
Usandoconsole.assert
El primer argumento que se pasa a la función es un valor que se debe probar como verdadero. Todos los demás argumentos que se pasan se consideran mensajes que se deben imprimir si el valor pasado no se evalúa como verdadero.
El Node REPL generará un error que detendrá la ejecución del código posterior.
console.assert(value, [...messages])
He aquí un ejemplo básico:
- console.assert(false, 'Assertion failed');
OutputAssertion failed: Assertion failed
Ahora, vamos a divertirnos un poco. Construiremos un mini marco de prueba usandoconsole.assert
const sum = (a = 0, b = 0) = Number(a) + Number(b);function test(functionName, actualFunctionResult, expected) { const actual = actualFunctionResult; const pass = actual === expected; console.assert(pass, `Assertion failed for ${functionName}`); return `Test passed ${actual} === ${expected}`;}console.log(test('sum', sum(1,1), 2)); // Test passed 2 === 2console.log(test('sum', sum(), 0)); // Test passed 0 === 0console.log(test('sum', sum, 2)); // Assertion failed for sumconsole.log(test('sum', sum(3,3), 4)); // Assertion failed for sum
Ejecute lo anterior en el REPL de su nodo o en la consola del navegador para ver qué sucede.
Usando console.erroryconsole.warn
Estos dos son básicamente idénticos. Ambos imprimirán cualquier cadena que se les pase.
Sin embargo, console.warn
imprime un símbolo de advertencia de triángulo antes de que se transmita el mensaje:
console.warn(string, substitution);
Mientras console.error
imprime un símbolo de peligro antes de que pase el mensaje.
console.error(string, substitution);
Observemos que la sustitución de cadenas se puede aplicar de la misma manera que el console.log
método.
Aquí hay una mini función de registro que utiliza console.error
.
const sum = (a = 0, b = 0) = Number(a) + Number(b);function otherTest(actualFunctionResult, expected) { if (actualFunctionResult !== expected) { console.error(new Error(`Test failed ${actualFunctionResult} !== ${expected}`)); } else { // pass }}otherTest(sum(1,1), 3);
Usandoconsole.trace(label)
Este método de consola imprimirá la cadena Trace:
seguida de la etiqueta pasada a la función y luego el seguimiento de la pila hasta la posición actual de la función.
function getCapital(country) { const capitalMap = { belarus: 'minsk', australia: 'canberra', egypt: 'cairo', georgia: 'tblisi', latvia: 'riga', samoa: 'apia' }; console.trace('Start trace here'); return Object.keys(capitalMap).find(item = item === country) ? capitalMap[country] : undefined;}console.log(getCapital('belarus'));console.log(getCapital('accra'));
Usandoconsole.count(label)
El conteo comenzará e incrementará un contador de nombre label
.
Construyamos un contador de palabras para ver cómo funciona.
const getOccurences = (word = 'foolish') = { const phrase = `Oh me! Oh life! of the questions of these recurring, Of the endless trains of the faithless, of cities fill’d with the foolish, Of myself forever reproaching myself, for who more foolish than I, and who more faithless?`; let count = 0; const wordsFromPhraseArray = phrase.replace(/[,.!?]/igm, '').split(' '); wordsFromPhraseArray.forEach((element, idx) = { if (element === word) { count ++; console.count(word); } }); return count;}getOccurences();
getOccurences('foolish');
Aquí vemos que la palabra foolish
se registró dos veces: una por cada aparición de la palabra en la frase.
[secondary_label]foolish: 1foolish: 22
Podríamos usar esto como un método útil para ver cuántas veces se llamó a una función o cuántas veces se ejecutó una línea en nuestro código.
Usandoconsole.countReset(label)
Como sugiere el nombre, esto restablece un contador que tiene un label
conjunto mediante el console.count
método.
const getOccurences = (word = 'foolish') = { const phrase = `Oh me! Oh life! of the questions of these recurring, Of the endless trains of the faithless, of cities fill’d with the foolish, Of myself forever reproaching myself, for who more foolish than I, and who more faithless?`; let count = 0; const wordsFromPhraseArray = phrase.replace(/[,.!?]/igm, '').split(' '); wordsFromPhraseArray.forEach((element, idx) = { if (element === word) { count ++; console.count(word); console.countReset(word); } }); return count;}getOccurences();
getOccurences('foolish');
[secondary_label]foolish: 1foolish: 12
Podemos ver que nuestra getOccurences
función devuelve 2 porque de hecho hay dos apariciones de la palabra foolish
en la frase, pero como nuestro contador se reinicia en cada coincidencia, se registra foolish: 1
dos veces.
Usando console.time(label)yconsole.timeEnd(label)
La console.time
función inicia un temporizador con el label
proporcionado como argumento a la función, mientras que la console.timeEnd
función detiene un temporizador con el label
proporcionado como argumento a la función.
console.time('timer-label');console.timeEnd('timer-label');
Podemos usarlo para calcular cuánto tiempo tomó ejecutar una operación pasando el mismo label
nombre a ambas funciones.
const users = ['Vivaldi', 'Beethoven', 'Ludovico'];const loop = (array) = { array.forEach((element, idx) = { console.log(element); })}const timer = () = { console.time('timerLabel'); loop(users); console.timeEnd('timerLabel');}timer();
Podemos ver la etiqueta del temporizador mostrada contra el valor del tiempo después de que el temporizador se detiene.
OutputVivaldiBeethovenLudovicotimerLabel: 0.69091796875ms
La función de bucle tardó 0,6909 ms en terminar de recorrer la matriz.
Conclusión
Por fin llegamos al final de este tutorial.
Tenga en cuenta que este tutorial no cubrió usos no estándar de la console
clase como console.profile
, console.profileEnd
, y console.timeLog
.
Deja una respuesta