Depurar tu aplicación es muy importante, pero muchas veces terminas utilizando console.log por todos lados, lo cual no es recomendable para producción, ya que estas son funciones asíncronas, además de tener muchas limitaciones. Hoy te voy a enseñar lo básico del “módulo debug” para depurar tu aplicación de express.

Para seguir esta guía necesitas saber como crear una aplicación de express, asumo que ya tienes una para empezar a utilizar el módulo debug. Si deseas obtener más información sobre por qué no deberías usar console.log, puedes visitar la guía de express “Mejores prácticas de rendimiento”. Basados en esta “guía de depuración de express”, Express utiliza el módulo debug internamente para registrar información sobre las coincidencias de rutas, las funciones de middleware que se están utilizando, la modalidad de aplicación y el flujo del ciclo de solicitud/respuestas. Empecemos con un ejemplo de como activar el módulo debug para nuestra aplicación Express, utilizaremos una aplicación generada por el “Generador de aplicaciones Express”, solo necesitas iniciar tu aplicaciones e inicializar la variable de entorno DEBUG de esta manera:

// Linux
$ DEBUG=express:* node index.js

// Windows
> set DEBUG=express:* & node index.js

La ejecución de este comando en la aplicación predeterminada generada por el generador de Express imprime la siguiente salida:

 $ DEBUG=express:* node ./bin/www
 express:router:route new / +0ms
 express:router:layer new / +1ms
 express:router:route get / +1ms
 express:router:layer new / +0ms
 express:router:route new / +1ms
 express:router:layer new / +0ms
 express:router:route get / +0ms
 express:router:layer new / +0ms
 express:application compile etag weak +1ms
 express:application compile query parser extended +0ms
 express:application compile trust proxy false +0ms
 express:application booting in development mode +1ms
 express:router use / query +0ms
 express:router:layer new / +0ms
 express:router use / expressInit +0ms
 express:router:layer new / +0ms
 express:router use / favicon +1ms
 express:router:layer new / +0ms
 express:router use / logger +0ms
 express:router:layer new / +0ms
 express:router use / jsonParser +0ms
 express:router:layer new / +1ms
 express:router use / urlencodedParser +0ms
 express:router:layer new / +0ms
 express:router use / cookieParser +0ms
 express:router:layer new / +0ms
 express:router use / stylus +90ms
 express:router:layer new / +0ms
 express:router use / serveStatic +0ms
 express:router:layer new / +0ms
 express:router use / router +0ms
 express:router:layer new / +1ms
 express:router use /users router +0ms
 express:router:layer new /users +0ms
 express:router use / <anonymous> +0ms
 express:router:layer new / +0ms
 express:router use / <anonymous> +0ms
 express:router:layer new / +0ms
 express:router use / <anonymous> +0ms
 express:router:layer new / +0ms

Cuando se realiza una solicitud a la aplicación, verá los registros especificados en el código de Express:

 express:router dispatching GET / +4h
 express:router query  : / +2ms
 express:router expressInit  : / +0ms
 express:router favicon  : / +0ms
 express:router logger  : / +1ms
 express:router jsonParser  : / +0ms
 express:router urlencodedParser  : / +1ms
 express:router cookieParser  : / +0ms
 express:router stylus  : / +0ms
 express:router serveStatic  : / +2ms
 express:router router  : / +2ms
 express:router dispatching GET / +1ms
 express:view lookup "index.pug" +338ms
 express:view stat "/projects/example/views/index.pug" +0ms
 express:view render "/projects/example/views/index.pug" +1ms

Si deseas crear tu propio depurador para tu aplicación debes utilizar ‘require’ para llamar al módulo ‘debug’ en tu aplicación, puedes llamarlo la cantidad de veces que desees y darle un nombre único a cada uno, por ejemplo, puedes utilizar un depurador para cada archivo en tu aplicación, de esta forma es más fácil darse cuenta que esta pasando y donde, puedes llamar varios en cada archivo si lo deseas, pero te recomiendo que le des un prefijo a todos para que poder activarlos y desactivarlos de forma más sencilla, veamos un ejemplo:

// server.js

const app = require('./app');
const server = require('http').Server(app);
const debug = require('debug')('app:server');
const port = process.env.PORT || 3000;

server.listen(port, () => {
 debug(`Server running on port: ${server.address().port}`);
});

Esto es un simple archivo server.js que sirve para iniciar tu aplicación, ten en cuenta que usé require(‘debug’)(‘app:server’) para llamar al depurador y guardarlo en la variable “const debug”, ‘debug’ es el módulo, y (‘app:server’) es el nombre de tu depurador, ese es el nombre que verás en la consola, utilicé ‘app:’ como prefijo y ‘server’ es simplemente el nombre que le quise dar al depurador, es el nombre del archivo, cada vez que necesite crear un depurador le puedes dar el nombre ‘app:cualquierNombreQueDesees’, y si quieres ver los depuradores que creaste en la consola solo debes iniciar tu aplicación de esta manera:

// Linux
$ DEBUG=app:* node server.js

// Windows
> set DEBUG=app:* & node server.js

La ejecución de este comando en la consola imprime la siguiente salida:

app:server Server running on port: 3000 +9ms

El módulo debug es muy facil de utilizar y configurar, solo necesitas especificar los depuradores que deseas en la variable de entorno DEBUG y separarlos por coma, puedes excluir algunos si desea, utilizando el caracter ‘-’ antes del nombre, veamos algunos ejemplos:

// Esto imprimirá todos los depuradores en la consola ten en cuenta // que ‘*’ significa lo que sea.
DEBUG=*

// Esto imprimirá todo menos ‘express:*’ en la consola.
DEBUG=*,-express:*

// Esto imprimirá todos los depuradores que empiecen con el prefijo // ‘app:’ y ‘express:’ en la consola.
DEBUG=app:*,express:*

Puedes crear algunos scripts en el package.json para iniciar tu aplicación con algunos depuradores.

// package.json

.
.
.
"scripts": {
   "start": "node server.js",
   "start:dev": "set DEBUG=* & set NODE_ENV=development & node server.js"
 },
.
.
.

Debes mantener el script ‘start’ limpio, sin depuradores para producción, el script ‘start:dev’ inicializa la variable de entorno DEBUG para imprimir todo en la consola, inicializar NODE_ENV a ‘development’ y finalmente inicia la aplicación, esto es para windows, no necesitas ‘set’ ni ‘&’ en linux. Puedes usar este comando en la consola de esta manera:

> npm run start:dev

Probé el modulo debug en Heroku hace poco, y funciona perfectamente, Heroku utiliza el script “start” de tu package.json para iniciar la aplicación, pero podrías tener alguna aplicación en modo ‘development’ en Heroku, para activar los depuradores en la consola de Heroku solo debes configurar la variable DEBUG en la app de la siguiente manera:

Luego vas a la consola de depuración de Heroku ‘View logs’.

Y por último seleccionas la opción web.

Hemos terminado aquí, esto solo un ejemplo básico de lo que puedes hacer con el módulo debug, te darás cuenta que muchas librerías de javascript usan este módulo, también funciona para el frontend, es muy simple de usar y tienes mas control para depurar tu aplicación, ¡mantente en contacto para más publicaciones!