n8n Code-nod: skriva JavaScript och Python direkt i ditt workflow
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.