n8n Nodo Code JavaScript: Guía Avanzada para Workflows [2026]
El n8n nodo code javascript es, sin exagerar, una de las herramientas más poderosas que tenés disponibles en la plataforma. Cuando los nodos visuales se quedan cortos para implementar la lógica que necesitás, el nodo Code te permite escribir JavaScript directamente dentro de tu workflow para transformar datos, implementar algoritmos complejos, consumir APIs y hacer prácticamente cualquier cosa que podés hacer con Node.js. En esta guía vas a aprender desde los conceptos básicos del nodo Code hasta técnicas avanzadas que usan desarrolladores experimentados de n8n todos los días. Si ya sabés un poco de JavaScript (o estás dispuesto a aprender), el n8n nodo code javascript va a desbloquear un nivel completamente nuevo de posibilidades en tus automatizaciones.
¿Qué es el n8n nodo code javascript y cuándo usarlo?
El nodo Code en n8n te permite ejecutar código JavaScript personalizado como parte de tu workflow. Tiene acceso a todos los datos del flujo, puede usar librerías disponibles en el entorno de n8n y retorna datos que continúan al siguiente nodo. No es solo un «parche» para cuando no hay nodos nativos: es una puerta abierta a la flexibilidad total. Usá el n8n nodo code javascript cuando:
- Necesitás transformaciones de datos complejas que los nodos Set o Function no pueden manejar fácilmente.
- Querés implementar algoritmos de cálculo como scoring, validaciones complejas o procesamiento matemático.
- Necesitás formatear datos en estructuras muy específicas para una API externa.
- Querés combinar o procesar múltiples items de formas que los nodos estándar no permiten.
- Necesitás usar funciones nativas de JavaScript que no están disponibles como expresiones en n8n.
El nodo Code reemplaza al anterior nodo Function en versiones modernas de n8n, con una interfaz mejorada y acceso a más funcionalidades. Si venís usando el nodo Function, la migración es bastante directa, así que no tenés excusa para quedarte en la versión vieja.
Estructura básica del n8n nodo code javascript
El nodo Code tiene dos modos de operación que determinan cómo recibís y procesás los datos. Elegir el modo correcto es clave para que tu código sea eficiente y fácil de mantener.
Run Once for All Items
El código se ejecuta una sola vez y recibe todos los items del flujo como un array. Es ideal para operaciones que necesitan ver todos los datos juntos: agrupar, ordenar, filtrar o calcular totales.
Run Once for Each Item
El código se ejecuta una vez por cada item individual. Es ideal para transformar cada item de forma independiente sin necesidad de ver el conjunto completo.
En el modo All Items, los datos están disponibles en $input.all() que retorna un array de items. En el modo Each Item, el item actual está en $input.item. El código siempre debe retornar datos en el formato correcto de n8n. Si no lo hacés, el workflow va a generar un error:
// Para Run Once for All Items:
return items; // array de {json: {...}} objects
// Para Run Once for Each Item:
return { json: { ... } }; // objeto con propiedad jsonEste formato con la propiedad json es fundamental. Es uno de los errores más comunes cuando estás empezando con el n8n nodo code javascript, así que tatuatelo o tenelo a mano hasta que te salga natural.
Variables y funciones disponibles en el nodo Code
Una de las ventajas del nodo Code es que n8n expone varias variables y helpers especiales que podés usar directamente en tu código sin instalar nada ni hacer imports raros:
$input: acceso a los datos de entrada. Métodos principales:$input.all()(todos los items),$input.item(item actual en modo Each Item),$input.first()(primer item).$json: acceso directo a los datos JSON del item actual. Equivalente a$input.item.json.$env: acceso a las variables de entorno configuradas en n8n.$vars: acceso a las variables del workflow definidas en su configuración.$execution: información sobre la ejecución actual — ID, timestamp y modo.$workflow: información sobre el workflow — ID y nombre.$now: fecha y hora actual en formato Luxon (la librería de fechas de n8n).
Además, tenés disponibles como built-ins las librerías luxon para manejo de fechas y lodash para utilidades generales de JavaScript. No necesitás importarlas, ya están listas para usar apenas abrís el editor de código.
Ejemplos prácticos con n8n nodo code javascript
Vamos a lo que realmente importa: ejemplos que podés copiar y adaptar a tus propios workflows. Estos tres escenarios cubren el 80% de los casos de uso que vas a enfrentar.
Ejemplo 1 — Calcular el total de un array de números
Este snippet toma todos los items, suma el campo amount y retorna un único item con el total, la cantidad y el promedio. Es perfecto para reportes rápidos o validaciones financieras:
const items = $input.all();
const total = items.reduce((sum, item) => sum + item.json.amount, 0);
return [{
json: {
total,
count: items.length,
average: total / items.length
}
}];Simple, directo y mucho más rápido que armar esto con nodos visuales cuando tenés decenas o cientos de items.
Ejemplo 2 — Filtrar items según condición compleja
Acá filtramos items que cumplan tres condiciones simultáneas: score mayor a 50, estado activo y creados hace menos de 30 días. Este tipo de filtrado multicondición es donde el nodo Code realmente brilla frente a los nodos visuales:
const items = $input.all();
const filtered = items.filter(item => {
const { score, status, createdAt } = item.json;
const daysSince = $now.diff(
luxon.DateTime.fromISO(createdAt), 'days'
).days;
return score > 50 && status === 'active' && daysSince < 30;
});
return filtered;Fijate cómo usamos luxon sin importarla. Eso es oro puro cuando trabajás con fechas en distintos formatos y zonas horarias.
Ejemplo 3 — Formatear datos para una API específica
Muchas veces las APIs externas no aceptan los datos tal cual salen de tu CRM, base de datos o formulario. Necesitás transformar IDs, unificar nombres, estandarizar emails y formatear fechas con una zona horaria específica. Este ejemplo hace exactamente eso:
const items = $input.all();
return items.map(item => ({
json: {
external_id: `CUST-${item.json.id.toString().padStart(6, '0')}`,
full_name: `${item.json.firstName} ${item.json.lastName}`.trim(),
email: item.json.email.toLowerCase(),
created: luxon.DateTime.fromISO(item.json.created_at)
.setZone('America/Mexico_City')
.toFormat('dd/MM/yyyy HH:mm'),
}
}));Acá no solo estamos limpiando datos, sino que también aplicamos lógica de negocio: el external_id lleva un prefijo con ceros a la izquierda, el email se normaliza a minúsculas y la fecha se convierte al horario de Ciudad de México con un formato legible. Este tipo de transformación masiva es imposible de mantener si la armás con nodos individuales.
Caso de uso avanzado: agrupar y agregar datos
Una de las operaciones más poderosas del nodo Code es agrupar datos que vienen de una fuente y agregarlos de formas que los nodos visuales no pueden hacer fácilmente. Imaginate que tenés una lista de transacciones y querés agruparlas por cliente para calcular el total gastado y la cantidad de operaciones por persona. En SQL sería un GROUP BY con sumatorias; en n8n, lo resolvés con un objeto acumulador y un poco de JavaScript:
const items = $input.all();
const grupos = {};
items.forEach(item => {
const clienteId = item.json.cliente_id;
if (!grupos[clienteId]) {
grupos[clienteId] = {
cliente_id: clienteId,
nombre: item.json.nombre_cliente,
total: 0,
cantidad: 0
};
}
grupos[clienteId].total += item.json.monto;
grupos[clienteId].cantidad += 1;
});
return Object.values(grupos).map(grupo => ({
json: grupo
}));Lo que hace este código es recorrer todos los items una sola vez y construir un objeto grupos donde cada clave es un cliente_id. Si es la primera vez que ve a ese cliente, inicializa el objeto con los campos base. Después, va sumando el monto de cada transacción y contando cuántas operaciones tiene. Al final, convierte el objeto en un array de items de n8n usando Object.values() y el formato json obligatorio. Este patrón es reutilizable para reportes de ventas, consolidación de leads por fuente, balance de inventarios y cualquier escenario donde necesitás pasar de una lista plana a datos resumidos.
Si combinás esta técnica con el modo Run Once for All Items, podés procesar miles de registros en segundos sin saturar la memoria del workflow, ya que todo ocurre dentro de una misma ejecución del nodo.
Conclusión
A esta altura ya deberías tener una idea clara de por qué el n8n nodo code javascript es tan respetado entre los que llevan tiempo automatizando en serio. Desde filtros simples hasta agregaciones complejas, este nodo te saca de apuros cada vez que los clicks no alcanzan. No te quedes solo en lo visual: cuanto más cómodo te pongas escribiendo código dentro de n8n, más rápido vas a resolver integraciones que otros ni se animan a intentar. Si te quedaste con ganas de más, la mejor forma de dominarlo es abrir el editor, tirar un nodo Code y empezar a probar con datos reales. Ahí es donde realmente se aprende.