Contenido

Tutorial del nodo Code de n8n: procesa datos con JavaScript y Python

Cuando las expresiones y los nodos disponibles no pueden resolver lo que necesitas, el nodo Code te permite escribir JavaScript (o Python) directamente.

Dos modos de ejecución

ModoNúmero de ejecucionesLectura de datosAdecuado para
Run Once for All ItemsEl nodo se ejecuta una sola vez$input.all()Estadísticas, ordenar, combinar y generar varios elementos nuevos
Run Once for Each ItemSe ejecuta una vez por cada item$input.item / $jsonTransformar datos elemento por elemento

Formato de retorno

El nodo Code debe devolver un array de items; cada elemento tiene el formato { json: {...} }:

return [
  { json: { name: "Ana", score: 90 } },
  { json: { name: "Luis", score: 85 } },
];

En el modo Run Once for Each Item, basta con devolver un objeto:

return { json: { ...$json, total: $json.price * $json.qty } };

(Las versiones recientes de n8n también aceptan que devuelvas directamente un objeto normal y lo envuelven automáticamente en { json: ... }, pero escribirlo explícitamente ayuda a evitar errores.)

Ejemplo: calcular y añadir campos (ejecución por item)

const price = Number($json.price);
const qty = Number($json.qty);

return {
  json: {
    ...$json,
    subtotal: price * qty,
    shipping: price * qty >= 1000 ? 0 : 60,
  },
};

Ejemplo: generar estadísticas (una sola ejecución para todos)

const items = $input.all();

const byRegion = {};
for (const item of items) {
  const { region, amount } = item.json;
  byRegion[region] = (byRegion[region] ?? 0) + Number(amount);
}

return Object.entries(byRegion)
  .sort((a, b) => b[1] - a[1])
  .map(([region, total]) => ({ json: { region, total } }));

Si introduces 100 pedidos, obtendrás un registro con el total de cada región.

Ejemplo: generar varios elementos

// Generate dates for the next 7 days
const days = [];
for (let i = 0; i < 7; i++) {
  days.push({ json: { date: $now.plus({ days: i }).toFormat("yyyy-MM-dd") } });
}
return days;

Ejemplo: organizar datos complejos devueltos por una API

const data = $input.first().json;

return data.results
  .filter((r) => r.status === "active")
  .map((r) => ({
    json: {
      id: r.id,
      name: r.profile?.display_name ?? r.username,
      email: r.contact?.email ?? null,
      tags: (r.tags ?? []).map((t) => t.label).join(", "),
    },
  }));

Leer datos de otros nodos

Igual que con las expresiones:

const settings = $("Obtener configuración").first().json;
const orders = $("Pedidos").all();

Depuración

console.log($json);

La salida aparece en la consola Console de las herramientas para desarrolladores del navegador (al hacer pruebas manuales).

Usar paquetes npm externos

En la versión autohospedada, puedes permitir que el nodo Code use módulos integrados y paquetes externos mediante variables de entorno:

NODE_FUNCTION_ALLOW_BUILTIN=crypto
NODE_FUNCTION_ALLOW_EXTERNAL=lodash,dayjs

Los paquetes externos deben estar instalados en el entorno donde se ejecuta el nodo Code (si usas Docker, normalmente necesitas una imagen personalizada). En n8n 2.x, el nodo Code se ejecuta en un task runner; consulta la documentación oficial sobre task runners para ver la configuración relacionada.

Cambios importantes en n8n 2.x

  • De forma predeterminada, el nodo Code no puede leer variables de entorno ($env), para evitar filtraciones de secretos.
  • $evaluateExpression() ya no es compatible dentro del nodo Code.
  • Python: se eliminó el método de ejecución de versiones anteriores con Pyodide (Python en el navegador). El nodo Python Code de n8n 2.x requiere un task runner que se ejecute en «modo externo» (n8n ofrece la imagen n8nio/runners), y su sintaxis es distinta de la de versiones anteriores.

Ejemplo de Python (requiere un task runner de Python configurado)

# Run Once for All Items
results = []
for item in _items:
    data = item["json"]
    results.append({"json": {"name": data["name"].strip(), "length": len(data["name"])}})
return results

El nuevo método de ejecución de Python usa _items (todos los items) o _item (modo por item) y accede a los campos mediante corchetes en diccionarios; no admite _input ni la sintaxis con puntos. Si tu entorno no tiene configurado un task runner de Python, te recomendamos usar JavaScript.

Cuándo no usar el nodo Code

  • Para obtener un valor o dar formato a datos → usa expresiones.
  • Para dividir, combinar, filtrar u ordenar → usa Split Out, Aggregate, Filter o Sort.
  • Para llamar a una API → usa HTTP Request.

Cuantos menos nodos Code uses, más fácil será que otras personas entiendan y mantengan el flujo de trabajo.

Actualizado 12 de octubre de 2026