10

Depurando aplicaciones de Node.js v8.0.0

20845Puntos

hace 2 años

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.

Iniciando el proyecto

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

El código

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.

node inspector remote target

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.

Chrome Developer Tools inspeccionando un proceso de Node.js

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.

Palabras finales

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.

Sergio Daniel
Sergio Daniel
@sergiodxa

20845Puntos

hace 2 años

Todas sus entradas
Escribe tu comentario
+ 2
0
278Puntos
node--inspect .

Automáticamente corre index.js?

2
20845Puntos
2 años

Al colocar el . se usa el archivo indicado en la propiedad main del package.json. Sin importar el nombre o la ruta.

0
19Puntos

Espero que también se pueda con Firefox, es mi navegador de cabecera, el viejo confiable

1
20845Puntos
2 años

Al igual node-inspector usa las devtools de chrome, de hecho está siendo desarrollado por el equipo de V8/Chromium por lo que dudo que funcione en Firefox.