← Volver al blog

n8n Code Node JavaScript: tutorial de depuración

Tutorial de JavaScript en el nodo Code de n8n: modos de ejecución, acceso a datos, código async, depuración con console.log y errores de vinculación en producción.

Un único globo de prueba bajo una lupa frente a un creciente racimo de globos de producción.

Comprobado con las fuentes citadas el .

Primeros pasos con JavaScript en el nodo Code de n8n

Un script bien construido en el entorno JavaScript del nodo Code de n8n puede sustituir a varios nodos habituales con unas pocas líneas de lógica, pero los pequeños errores en cómo se cuentan o se devuelven los ítems pueden pasar desapercibidos hasta que el flujo de trabajo se ejecuta con datos reales. Este tutorial cubre cómo configurar un nodo Code, elegir el modo de ejecución adecuado, leer los datos de los ítems de forma segura, manejar código asíncrono y depurar con console.log, y luego qué cambia cuando ese mismo script tiene que ejecutarse contra datos reales de una API en producción.

Para seguir este tutorial necesitas un flujo de trabajo de n8n existente con al menos un nodo que produzca datos de ejemplo, además de un nodo Code colocado después de él y configurado para ejecutarse en modo JavaScript en lugar de Python. Este tutorial asume una familiaridad básica con la adición de nodos al lienzo y la trata como una navegación habitual, no como un paso de depuración. El objetivo a continuación es un pequeño script que lee los datos de los ítems entrantes, los transforma y registra su propio progreso, primero con un ítem de ejemplo y después con una respuesta realista de varios ítems.

Elige un modo de ejecución y accede a los datos de los ítems

Dos mesas de trabajo comparan JavaScript en el nodo Code de n8n ejecutándose una vez para todos los ítems frente a una vez por cada ítem.
Una comparación ilustrativa de los dos modos de ejecución del nodo Code.

El nodo Code ofrece dos modos de ejecución. Run Once for All Items es el predeterminado: el script se ejecuta una sola vez sin importar cuántos ítems lleguen, por lo que debe recorrer la entrada por sí mismo. Run Once for Each Item, en cambio, ejecuta el script por separado para cada ítem, lo que resulta más fácil de razonar mientras el script sigue siendo pequeño.

  1. Elige un modo de ejecución: Run Once for All Items o Run Once for Each Item.
  2. Accede a los datos de los ítems con $json, $input.item, $input.all() o una referencia a un nodo anterior.
  3. Maneja código síncrono o asíncrono, devolviendo una Promise cuando sea necesario.
  4. Depura con console.log mientras el script todavía sea pequeño.

Dentro del script, $json es un atajo para los datos JSON del ítem de entrada actual, y $input.item devuelve ese mismo ítem actual de forma explícita. $input.all() devuelve todos los ítems de entrada como un array, que es sobre lo que recorre un script en modo Run Once for All Items. Cuando un script necesita un campo de un nodo anterior en lugar de su entrada inmediata, $('Node Name').item.json obtiene directamente los datos de ese ítem vinculado.

Atajos para acceder a los datos de los ítems dentro del nodo Code
AtajoDevuelveUso típico
$jsonJSON del ítem de entrada actualLecturas rápidas dentro de Run Once for Each Item
$input.itemEl ítem que se está procesando actualmenteEquivalente explícito de $json
$input.all()Array con todos los ítems de entradaRecorrer ítems en Run Once for All Items
$('Node Name').item.jsonJSON del ítem vinculado de un nodo anteriorObtener un campo que no está en el ítem actual

Sources: Using the Code node | Build | n8n Docs, Reference previous nodes | Build | n8n Docs, Nodeinputdata | Build | n8n Docs

Maneja código asíncrono y depura con console.log

La mayoría de los scripts de transformación cortos son síncronos, pero el nodo Code también admite JavaScript asíncrono: en lugar de devolver los ítems directamente, un script puede devolver una Promise que n8n espera y resuelve antes de pasar los datos a los siguientes nodos. Esto importa cuando el JavaScript del nodo Code de n8n necesita esperar una operación en lugar de calcular un resultado de inmediato.

Para depurar, la propia documentación de n8n menciona console.log como una forma admitida de escribir en la consola desde dentro del nodo Code, útil para comprobar un valor o confirmar que un paso de transformación se ejecutó. Anthony Sidashin, un desarrollador que escribió sobre el uso de n8n desde la perspectiva de un desarrollador, describió este comportamiento a partir de su propia experiencia práctica con el nodo Code.

Sources: Using the Code node | Build | n8n Docs, My experience using n8n, from a developer perspective

Resultados esperados y solución de errores comunes del nodo Code

Después de ejecutar el nodo con un ítem de ejemplo, el panel de salida debería mostrar uno o más ítems, cada uno con una clave json, tal como n8n pasa los datos entre nodos: como un array de objetos envueltos en json. Si el valor devuelto por el script no coincide con esa forma, o no devuelve nada, el nodo genera un error de 'no devuelve los ítems correctamente' en lugar de pasar datos incorrectos de forma silenciosa.

Hay algunos otros errores que aparecen repetidamente cuando un script crece más allá de un único ítem de prueba, resumidos a continuación.

Errores comunes del nodo Code y sus causas
ErrorCausa probableSolución
"No devuelve los ítems correctamente"El valor devuelto no es un array de objetos envueltos en jsonDevuelve un array donde cada ítem tenga una clave json
"Cannot find module"El script importa un paquete npm externo no disponible en esa instanciaInstala y autoriza el módulo en un n8n autoalojado, o evita las importaciones externas en n8n Cloud
El nodo Code no puede leer una credencialPor diseño, los nodos Code no pueden acceder a las credenciales guardadasObtén los datos autenticados con un nodo HTTP Request y pasa solo su JSON al nodo Code

Sources: Common issues | Nodes | n8n Docs, Using the Code node | Build | n8n Docs

De datos de prueba a datos reales de una API en producción

Hilos conectan cada globo de producción con su ítem original, mostrando la vinculación pairedItem en el nodo Code.
Un diagrama conceptual de la vinculación de ítems cuando los datos de producción crean nuevos ítems.

Ejecutar el JavaScript del nodo Code de n8n contra datos reales de una API en producción cambia un supuesto que funcionaba bien con un único ítem de ejemplo: n8n solo gestiona la vinculación de ítems automáticamente cuando hay un único ítem de entrada. Cuando un script procesa una respuesta de la API con varios ítems, o crea ítems nuevos en lugar de pasar los mismos, esa vinculación automática deja de cubrir el resultado, y los nodos posteriores pueden perder el rastro de qué salida procede de qué entrada.

La solución es establecer pairedItem de forma explícita en cada ítem que devuelve el script, para que los nodos posteriores puedan seguir rastreando un resultado hasta su origen. Los límites de credenciales y módulos mencionados antes importan aún más aquí, ya que los scripts en producción son precisamente donde un equipo recurre a un paquete externo u olvida que las llamadas autenticadas pertenecen al nodo HTTP Request, no al nodo Code.

Sources: Preserving linking in the Code node | Build | n8n Docs

Ponlo en práctica

Retos prácticos de n8n

Elige un reto y construye un workflow que funcione en tu propio entorno de n8n, con cinco pistas progresivas por reto.

Prueba un reto práctico

Para tu equipo

Programas de formación en n8n a medida para un equipo o departamento, en tu propia instancia de n8n y con tus herramientas y datos.

Formación para tu equipo