n8n Code node: JavaScript och Python för logik som saknar en nod
n8n har hundratals noder för API:er, databaser och tjänster. Men ibland behöver du logik som ingen nod hanterar: ett ovanligt regex, en beräkning, en sluggenerator. Det är när Code-noden börjar.
Vad Code-noden gör
Code-noden kör antingen JavaScript eller Python direkt i ditt workflow. Ingen extern tjänst. Ingen webhook. Bara kod som körs när noden exekveras.
Du växlar språk i noden via dropdown-menyn uppe till höger. JavaScript är default och fungerar i alla n8n-miljöer. Python kräver att n8n hittar en Python-binär — självhostad installation med Python installerat, eller n8n Cloud på en plan som stödjer det. Kontrollera med python3 --version på din server om du är osäker.
Inputformat
Båda språken exponerar samma API för att komma åt items:
// JavaScript
const items = $input.all(); // alla items som array
const first = $input.first(); // första itemet
# Python
items = _input.all()
first = _input.first()
Varje item har en .json-egenskap med din faktiska data. Andra metadata lever under .binary och .pairedItem.
Outputformat
Det enda som spelar roll: Code-noden förväntar sig att du returnerar en array av objekt med en json-nyckel.
return [
{ json: { slug: "mitt-värde", timestamp: new Date().toISOString() } },
{ json: { slug: "annat-värde", timestamp: new Date().toISOString() } }
];
Glömmer du json-omslaget ser du ett kryptiskt felmeddelande om att outputen inte är valid. Det är nästan alltid det.
Run Once for All Items
Som default kör Code-noden en gång per input-item. Slår du på “Run Once for All Items” i nodens inställningar får du hela arrayen i ett enda anrop och returnerar en ny array som ersätter alla items.
Använd det när du behöver aggregera: summera värden, hitta max, slå ihop rader. Annars är default-läget enklare att resonera kring — noden ser ett item och returnerar ett item (eller noll om du filtrerar bort det).
Tre vanliga use cases
Slug-generering. Set-noden kan inte köra replace(/[^a-z0-9-]/g, ''). Code-noden kan.
return $input.all().map(item => ({
json: {
...item.json,
slug: item.json.title
.toLowerCase()
.replace(/\s+/g, '-')
.replace(/[^a-z0-9-]/g, '')
}
}));
Datumbearbetning med precision. $now är fryst till exekveringsstart. new Date() i Code-noden ger faktisk väggklocktid.
Konditionell transformation. Om fältet X är tomt, fyll med Y; annars normalisera Z. Set-noden hanterar enkel logik med expressions. Code-noden hanterar nestade villkor utan att expressions-syntaxen exploderar.
När du inte ska använda Code-noden
Varje Code-nod är ett black box för den som tar över ditt workflow. Den syns inte i n8n:s visuella diff, den är svårare att testa isolerat och den lämnar inget spår i nodehistoriken.
Fråga dig: kan en Set-, Filter-, Merge- eller Split-nod lösa det här? Då är den noden bättre. Code-noden är rätt verktyg när ingenting annat räcker — inte ett första alternativ för enkel logik.
En tumregel: om du skriver mer än 20 rader kod i en Code-nod, undersök om logiken borde vara en extern funktion som du anropar via HTTP Request i stället.
Vanliga frågor
Vilket språk ska jag välja — JavaScript eller Python?
JavaScript om du är osäker. Det fungerar i alla n8n-miljöer utan extra konfiguration. Python om du är mer bekväm med Python och vet att din n8n-installation stödjer det.
Kan Code-noden göra HTTP-anrop?
Tekniskt sett ja — fetch fungerar i JavaScript-läget. Men det är bättre att använda en dedikerad HTTP Request-nod som hanterar autentisering, timeout och felloggning på ett sätt som syns i workflow-grafen.
Hur felsöker jag Code-noden?
Använd console.log() i JavaScript eller print() i Python. Outputen syns i n8n:s exekveringslogg under “Logs” i sidopanelen. Kör sedan noden isolerat med “Execute Step” för att testa utan att köra hela workflödet.