Uno de los múltiples cambios de la versión 8.0.0 de Node.js es que ahora node-inspector viene incluido directamente en Node.js.
Vamos a ver cómo podemos usar esta nueva funcionalidad para depurar nuestras aplicaciones fácilmente.
Los primero que vamos a hacer es iniciar un proyecto de Node.js con el siguiente comando:
npm init --yes
Esto nos va a devolver un package.json
similar a este:
{
"name": "node-test",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"keywords": [],
"author": "",
"license": "ISC"
}
A vamos a modificar los scripts para tener los siguientes:
{
"scripts": {
"dev": "node --inspect .",
"start": "node ."
}
}
En desarrollo vamos a iniciar nuestra aplicación con npm run dev
o con yarn dev
. Luego en producción podemos usar npm start
o yarn start
como siempre. 😃
Vamos a hacer algo súper simple para este ejemplo. Vamos a crear un index.js
que inicie un servidor HTTP que devuelve la fecha actual del servidor.
const { createServer } = require('http');
createServer((req, res) => {
debugger;
res.end(Date());
}).listen(3000);
Este es nuestro servidor, super simple, lo importante acá es el debugger
. Si corremos la aplicación con npm start
o yarn start
entonces va a funcionar normal y va a ignorar el debugger. Pero lo importante es que si corremos yarn dev
o npm run dev
nos va a mostrar algo así en la consola:
$ node --inspect .
Debugger listening on ws://127.0.0.1:9229/a64288c4-972c-45b4-b83e-08330245c336
For help see https://nodejs.org/en/docs/inspector
Si entramos a nuestro localhost:3000
vamos a ver la fecha que nos devuelve el servidor. Hasta ahí todo normal, pero si accedemos a chrome://inspect/
desde nuestro navegador Chrome vamos a ver que aparece un Remote Target
que podemos inspeccionar.
Si le damos click a inspect
nos va a abrir las herramientas de desarrollo de Chrome conectadas a nuestro proceso de Node.js. Si ahora recargamos la página debería entonces pararse el proceso en el debugger
que colocamos y dejarnos inspeccionar el contenido de req
y res
.
Ahí podemos inspeccionar nuestros procesos. Si son más complejos podemos colocar más de un debugger e ir saltando entre ellos y luego decirle que continúe hasta que al final devuelve la respuesta del servidor al navegador.
Como vemos es muy fácil usar este inspector y las herramientas de desarrollo de Chrome al trabajar en aplicaciones de Node.js y al venir integrado con Node.js nos evita configurar herramientas externas y nos asegura de que va a funcionar sin problemas en cualquier tipo de aplicación de Node.js.