Este es un práctico tutorial de cómo depurar tus aplicaciones hechas en Node.js. Con esto aprenderás a hacer esta tarea por completo y de la mejor manera. Esta guía lo ayudará a comenzar a depurar tus aplicaciones y scriptsConcepto de Scripts¿Qué son los Scripts?Los Scripts son fragmentos de código que se usan para dar forma a herramientas tanto en Internet como en el sector de la informática en general. Son una parte crucial del software, puesto que se trata exactamente del código que conforma a una aplicación en su totalidad o a una de sus funciones, como además el que puedes hallar explorando cómo está hecha una web.Desde más Node.js. Continúa leyendo y entérate de mas.
Habilitar un inspector
Cuando se inicia con el interruptor --inspect , un proceso Node.js escucha a través de WebSockets los comandos de diagnóstico definidos por el protocolo Inspector de forma predeterminada en el host y el puerto 127.0.0.1:9229. A cada proceso también se le asigna un UUID único (por ejemplo 0f2c936f-b1cd-4ac9-aab3-f63b0f33d55e).
Los clientes de Inspector deben conocer y especificar la dirección de host, el puerto y el UUID para conectarse a la interfaz de WebSocket. La URLEl URL (Localizador Uniforme de Recursos), es una dirección definida que apunta a la posición de un archivo en un servidor y lo recupera. Las URL se introducen en un navegador web para ingresar a documentos en la web o se incrustan como hipervínculos dentro de un documento. Se puede usar un Permalink para que una URL esté disponible de forma permanente. Componentes de una URL • prefijo de protocolo más completa ws://127.0.0.1:9229/0f2c936f-b1cd-4ac9-aab3-f63b0f33d55e depende, por supuesto, del host y el puerto reales y con el UUID correcto para la instancia.
El Inspector también incluye un punto final HTTPEl HTTP (Hyper Text Transfer Protocol) es un protocolo que se usa para transmitir datos en redes. HTTP es un estándar técnico generalmente aceptado que establece cómo un cliente web se comunica con un servidor para que los datos solicitados por el cliente puedan ser cargados y mostrados. Información general Junto con el URL y el HTML, HTTP es uno de los conceptos más importantes de Internet (www). Fue desarrollado más para servir metadatosLos metadatos son datos estructurados que contienen información sobre una fuente como, por ejemplo, un libro o un documento web. Gracias a los metadatos resulta mucho más fácil hallar la fuente de información dado que contienen datos sobre el título, el autor, la fecha de publicación, la descripción, etc. Se utilizan en librerías pero además para la estadística y la ingeniería de software. Metadatos en WWW Los metadatos se utilizan más sobre el depurador, incluida su URL de WebSocket, UUID y la URL de Chrome DevTools. Obtén estos metadatos enviando una solicitud HTTP a http://[host:port]/json/list. Esto devuelve un objeto JSON como el siguiente; utiliza la propiedad webSocketDebuggerUrl como la URL para conectarse directamente a Inspector.
{
"description": "node.js instance",
"devtoolsFrontendUrl": "chrome-devtools://devtools/bundled/inspector.html?experiments=true&v8only=true&ws=127.0.0.1:9229/0f2c936f-b1cd-4ac9-aab3-f63b0f33d55e",
"faviconUrl": "https://nodejs.org/static/favicon.ico",
"id": "0f2c936f-b1cd-4ac9-aab3-f63b0f33d55e",
"title": "node",
"type": "node",
"url": "file://",
"webSocketDebuggerUrl": "ws://127.0.0.1:9229/0f2c936f-b1cd-4ac9-aab3-f63b0f33d55e"
}
También se puede dar instrucciones a un proceso Node.js iniciado sin –inspect para comenzar a escuchar los mensajes de depuración señalizándolo con SIGUSR1 (en Linux y OS X). A partir del Node 7, esto activa la APIConcepto de API¿Qué es una API?Una API, siglas de Application Programming Interface o Interfaz de Programación de Apps, es un recopilatorio de código que se puede emplear para que varias apps se comuniquen entre ellas. Es algo que realiza una tarea equivalente a la interfaz de usuario al momento de promover la interacción entre persona y programa, solo que aplicado única y exclusivamente dentro del entorno del software.Aún cuando suene más de depuración heredada; en el Node 8 y posterior activará la API Inspector.
La seguridad se ve implicada
Dado que el depurador tiene acceso completo al entorno de ejecución Node.js, un actor malintencionado capaz de conectarse a este puerto puede ejecutar código arbitrario en nombre del proceso del nodo. Es importante comprender las implicaciones de seguridad de exponer el puerto de depuración en redes públicas y privadas.
Exponer el puerto de depuración públicamente no es seguro
Si el depurador está vinculado a una dirección IPDirección de Protocolo de Internet, la dirección IP es una dirección de red que se puede asignar a un dispositivo en una red sólo una vez. Esto hace falta para que los paquetes de datos puedan direccionarse y entregarse correctamente. Una dirección IP es el identificador único de un PC que establece su ubicación en Internet. Muestra qué proveedor se está usando. La dirección IP de 32 bits (además llamada más pública, o 0.0.0.0, cualquier cliente que pueda acceder a su dirección IP podrá conectarse al depurador sin ninguna restricción y podrá ejecutar código arbitrario.
Por defecto se enlaza node –inspect a 127.0.0.1. Debe proporcionar explícitamente una dirección IP pública o 0.0.0.0, etc., si desea permitir conexiones externas al depurador. Hacerlo puede exponerlo a una amenaza de seguridad potencialmente importante. Le sugerimos que asegure los cortafuegos y los controles de acceso adecuados para evitar una exposición de seguridad.
Las aplicaciones locales tienen acceso completo al inspector.
Incluso si vincula el puerto del inspector a 127.0.0.1 (el valor predeterminado), cualquier aplicación que se ejecute localmente en su PC tendrá acceso sin restricciones. Esto es por diseño para permitir que los depuradores locales puedan adjuntar convenientemente.
NavegadoresConcepto de Navegadores¿Qué son los Navegadores?Los Navegadores son herramientas informáticas que utilizamos para, normalmente, navegar por Internet y visitar cualquier página web, al mismo tiempo de para hacer otras tareas como ver documentos, observar vídeos o reproducir contenido multimedia de cualquier tipo. Son un tipo de software sencillamente usual y bastante utilizado hoy en día.Insistimos en que es algo que se utiliza con mucha frecuencia, puesto que moverse por Internet más, websockets y política del mismo origen.
Los sitios web abiertos en un navegadorUn navegador (además: browser) es una herramienta informática que te permite ver documentos y datos y navegar por la red. Los navegadores pueden mostrar distintos tipos de recursos de información; principalmente documentos HTML, a pesar de todo, además son posibles otros tipos de archivos y contenido multimedia, como PDF, JPEG, MPEG, GIF o el lenguaje de meta marcado. A través el uso de complementos especiales y la configuración respectivo, los más web pueden hacer solicitudes WebSocket y HTTP bajo el modelo de seguridad del navegador. Es necesaria una conexión HTTP inicial para obtener un Id de sesiónUn ID de sesión es un número de identificación que se genera en el lado del servidor para asignar peticiones de usuario a una sesión. Este ID se almacena localmente con el usuario y se transfiere en forma de cookies o como un atributo URI (Uniform Resource Identifier). Cómo funciona Se puede ingresar a los datos de la última sesión que se almacena en el lado del servidor usando el más de depurador único. La misma política de origen impide que los sitios web puedan realizar esta conexión HTTP.
Para mayor seguridad contra los ataques de reencuadernación de DNSConcepto de DNS¿Qué son las DNS (Domain Name Server)?Al hablar de DNS, nos referimos a las iniciales Domain Name System (Sistema de Nombres de Dominio). Consiste en una tecnología que recurre a las bases de datos para detectar la dirección IP a la que pertenece cualquier dominio que un usuario quiera desear. Es decir, toma la URL y la “traduce” para ofrecer como resultado su dirección exacta, su IP.Para quien más, Node.js verifica que las cabeceras del ‘Host’ para la conexión especifiquen una dirección IP o localhost o localhost6 con precisión.
Estas políticas de seguridad no permiten conectarse a un servidorLos servidores son ordenadores centrales y potentes dentro del campo de la tecnología de la información que procesan y proporcionan software y archivos en una red. Desde el punto de vista de un cliente, varios ordenadores en una red pueden ponerse en contacto con el servidor central para conseguir la información solicitada. En la arquitectura cliente-servidor, el servidor puede ser un software que proporciona un servicio y se ejecuta en más de depuración remoto especificando el nombre del host. Puedes evitar esta restricción especificando la dirección IP o utilizando túneles ssh como se describe a continuación.
Clientes Inspectores
Varias herramientas comerciales y de código abiertoEl Código Abierto u Open Source se refiere al código fuente del software que es abiertamente alcanzable y que puede ser cambiado y distribuido por cualquier persona. La propuesta de código abierto estipula diez requerimientos para las licencias de software de código abierto. El principio El código fuente de un software se hace público: cualquiera puede leerlo, desarrollar el propio software y copiarlo. El software puede ser utilizado o distribuido más pueden conectarse al Inspector de nodos. A continuación se ofrece información básica sobre estos temas:
- node-inspect
- Depurador CLI soportado por la Fundación Node.js que utiliza el Protocolo Inspector.
- Una versión se incluye con Node y se puede utilizar con el nodo inspect myscript.js.
- La última versión también puede instalarse de forma independiente (por ejemplo, npm install -g node-inspect) y utilizarse con node-inspect myscript.js.
- Chrome DevTools 55+
- Opción 1: Abrir chrome://inspect en un navegador basado en Chromium. Haga clic en el botón Configurar y asegúrese de que el host y el puerto de destino aparecen en la lista.
- Opción 2: Copie devtoolsFrontendUrl de la salida de /json/list (ver arriba) o el texto –inspect hint y péguelo en Chrome.
- Opción 3: Instale Chrome Extension NIM (Administrador del Inspector de Nodos): httpsHTTPS (protocolo de Transferencia de Hiper-Texto) es un protocolo que permite determinar una conexión segura entre el servidor y el cliente, que no puede ser interceptada por personas no autorizadas. En resumidas cuentas, es la versión segura de el http (Hyper Text Transfer Protocol) Cómo funciona Una conexión HTTP estándar en Internet puede ser fácilmente secuestrada por partes no autorizadas. El propósito de una conexión HTTPS es evitar esto: encriptar más://chrome.google.com/webstore/detail/nim-node-inspector-manage/gnhhdgbaldcilmgcpfddgdbkhjohddkj
- Visual Studio Code 1.10+
- En el panel de depuración, haga clic en el icono de configuración para abrir .vscode/launch.json. Seleccione «Node.js» para la configuración inicial.
- Visual Studio 2017
- Elige «Depurar > Iniciar depuración» en el menú o pulsa F5.
- JetBrains WebStorm 2017.1+ y otros IDEs de JetBrains
- Cree una nueva configuración de depuración de Node.js y pulse Depurar. –inspect se usará por defecto para Node.js 7+. Para desactivar js.debugger.node.use.inspect en el Registro IDE.
- Interfaz remota de Chrome
- Tiene una biblioteca para facilitar las conexiones a los puntos finales del protocolo Inspector
Opciones de la línea de comandos
La tabla siguiente enumera el impacto de varios indicadores de tiempo de ejecución en la depuración:
- –inspect:
- Habilitar el agente de inspección
- Escuchar en la dirección y puerto predeterminados (127.0.0.0.1:9229)
- –inspect=[host:port]:
- Habilitar el agente de inspección
- Enlazar a dirección o host de nombre de host (predeterminado: 127.0.0.0.1)
- Escuchar en el puerto (predeterminado: 9229)
- –inspect-brk
- Habilitar el agente de inspección
- Escuchar en la dirección y puerto predeterminados (127.0.0.1:9229)
- Pausa antes de que comience el código de usuario
- –inspect-brk=[host:port]
- Habilitar el agente de inspección
- Enlazar a dirección o host de nombre de host (predeterminado: 127.0.0.0.1)
- Escuchar en el puerto (predeterminado: 9229)
- Pausa antes de que comience el código de usuario
- node inspect script.js
- Spawn proceso hijo para ejecutar el script del usuario bajo –inspect flag; y usar el proceso principal para ejecutar el depurador CLI.
- node inspect –port=xxxx script.js
- Spawn proceso hijo para ejecutar el script del usuario bajo –inspect flag; y usar el proceso principal para ejecutar el depurador CLI.
- Escuchar en el puerto (predeterminado: 9229)
Habilitación de escenarios de depuración remota
Te recomiendo que nunca hagas que el depurador escuche en una dirección IP pública. Si necesitas permitir conexiones de depuración remotas, te recomiendo el uso de túneles ssh en su lugar. Te proporciono el siguiente ejemplo sólo con fines ilustrativos. Por favor, comprende el riesgo de seguridad de permitir el acceso remoto a un servicio privilegiado antes de proceder.
Supongamos que está ejecutando Node.js en una máquina remota, remota.ejemplo.com, que desea poder depurar. En esa máquina, debe iniciar el proceso del nodo con el inspector escuchando sólo localhost (el predeterminado).
$ node --inspect server.js [php] Ahora, en su máquina local desde donde desea iniciar una conexión de cliente de depuración, puede configurar un túnel ssh: [php] $ ssh -L 9221:localhost:9229 [email protected]
Esto inicia una sesión de túnel ssh donde una conexión al puerto 9221 de su máquina local será reenviada al puerto 9229 de remota.ejemplo.com. Ahora puedes adjuntar un depurador como Chrome DevTools o Visual Studio Code a localhost:9221, que debería ser capaz de depurar como si la aplicación Node.js se estuviera ejecutando localmente.





