Skip to main content

n8n Code-nod: skriva JavaScript och Python direkt i ditt workflow

3 min read Updated:

n8n-serien har hittills gått igenom de noder du använder för att styra flödet — IF, Switch, Wait, Merge — och de som transformerar data: Set och Filter. Men vad händer när ingen av dem räcker?

Det är Code-nodens uppgift.

Vad Code-noden gör

Code-noden låter dig köra JavaScript eller Python direkt inuti ditt workflow. Du skriver koden i nodens editor, koden körs när exekveringen når noden, och du kan returnera ett eller flera items vidare i flödet.

Det finns inga API-anrop, ingen webhook, inget lösenord. Code-noden är bara en kodsandlåda med tillgång till dina workflow-data.

Språklägen

Standardläget är JavaScript. Det stöds i alla n8n-versioner och fungerar utan extra konfiguration.

Python-läget finns men kräver att Python är installerat i samma miljö som n8n kör i. På n8n Cloud är Python tillgängligt. På självhostad n8n behöver du verifiera att python3 finns i PATH.

Rekommendation för de flesta: börja med JavaScript. Om du kan skriva ett enkelt if-uttryck är du redo att använda Code-noden.

Hur du läser indata

Indata till Code-noden nås via det inbyggda objektet $input:

  • $input.all() — returnerar alla items från föregående nod som en array
  • $input.first() — returnerar det första itemet
  • $input.item — i “Run Once for Each Item”-läget returnerar det det aktuella itemet

Varje item har egenskapen .json som innehåller datan. Om föregående nod returnerade { "name": "Anders", "score": 42 } läser du det med $input.first().json.name.

Hur du returnerar data

Det vanligaste misstaget i Code-noden är returformatet. n8n förväntar sig alltid en array av objekt med formen:

return [
  { json: { name: "Anders", score: 42 } },
  { json: { name: "Britta", score: 38 } }
];

Returnerar du ett enkelt objekt utan att wrappa det i { json: ... } och sätta det i en array, misslyckas nästa nod i flödet med ett formatfel. Wrappa alltid.

Debuggning med console.log

console.log() är din bästa vän i Code-noden. All utdata syns under Execution-fliken i n8n:s sidopanel — kolumnen som heter “Output” eller “Logs” beroende på version. Du behöver inte lägga till en Debug-nod; lägg bara in ett console.log($input.all()) i koden och kör exekveringen.

npm-moduler

På självhostad n8n har du tillgång till alla npm-moduler som är installerade i Node-miljön. Du importerar dem med vanlig require():

const _ = require('lodash');
const items = $input.all();
const sorted = _.sortBy(items, item => item.json.score);
return sorted.map(item => ({ json: item.json }));

På n8n Cloud är urvalet begränsat till paket som n8n Cloud förinstallerar.

Vanliga användningsfall

Beräkningar. Prisnivåer, poängsummeringar, datumintervall — allt som kräver aritmetik bortom vad expressions hanterar.

Textmanipulation. Regex-ersättningar, formatering av telefonnummer, normalisering av adressfält med varierande format.

Array-omstrukturering. Om du har ett flat JSON med repeating keys och vill omvandla det till en array av objekt är Code-noden rätt verktyg.

Fallback. När du importerar data från en API som returnerar inkonsistenta strukturer (ibland ett objekt, ibland en array) lägger du en Code-nod i kedjan för att normalisera innan data träffar resten av workflödet.

Vad Code-noden inte är gjord för

Gör inte HTTP-anrop inuti Code-noden om du kan använda HTTP Request-noden istället. HTTP Request-noden hanterar autentisering, retry-logik och timeouts åt dig. Schemaläggning hör till Schedule Trigger, inte Code.

Vanliga frågor

Kan jag använda async/await i Code-noden?

Ja. JavaScript-läget stöder async/await. Returvärdet ska fortfarande vara en array med { json: ... }-objekt, men du kan använda await fritt inuti funktionen.

Hur hanterar jag fel i Code-noden?

Kasta ett undantag med throw new Error('Felmeddelande'). n8n fångar det och markerar exekveringen som misslyckad. Du kan koppla en Error Trigger-nod för att hantera fel vidare i ett separat workflow.

Vad är skillnaden mellan “Run Once for All Items” och “Run Once for Each Item”?

“Run Once for All Items” (standard) kör koden en gång med $input.all() tillgängligt — du ansvarar för loopning om du behöver iterera. “Run Once for Each Item” kör koden en gång per item, med $input.item tillgängligt i varje körning. Välj det sistnämnda när din kod handlar om ett item i taget och du vill slippa skriva looplogiken manuellt.

Tools Used in This Article

This article mentions several tools from my tech stack.

Get insights and updates first

Subscribe to get updates on agentic engineering, data pipelines, MCP infrastructure, and new projects straight to your inbox.