n8n IF-nod: villkorstyper, AND/OR-grupper och type-mismatch-fällan
IF-noden är n8n:s primära verktyg för villkorsstyrd routing. Den utvärderar ett set av villkor mot varje inkommande item och skickar itemet till True-utgången eller False-utgången. Det som skapar problem är ofta inte konceptet — det är hur villkorsbyggaren hanterar typer.
Villkorstyper
Villkorsbyggaren har sex typkategorier:
- String: equals, not equals, contains, not contains, starts with, ends with, regex match. Skiftlägeskänslig som standard.
- Number: equals, not equals, greater than, less than, greater than or equal, less than or equal, between. Kräver att fältvärdet faktiskt är ett tal vid körtid.
- Boolean: true, false. Behandlar
"true"(sträng) som false — det är inte ett booleskt värde. - DateTime: before, after, equal. Accepterar ISO 8601-strängar när fältet är ett ISO-datum.
- Array: contains (kontrollerar om något element är lika med värdet). Fungerar på arrayer, inte strängar.
- Object: has key, does not have key. Testar om en egenskap existerar, oavsett dess värde.
AND vs. OR
Inom en enskild villkorsgrupp växlar du mellan AND (alla villkor måste vara sanna) och OR (något villkor måste vara sant). När du lägger till en andra grupp kombineras grupperna med AND eller OR på gruppnivå.
Praktiskt exempel: dirigera items där status är "error" OCH retryCount är större än 3. Det är en grupp med två AND-villkor. Vill du fånga antingen av dem, växla grupoperatorn till OR.
Type-mismatch-fällan
Det här är felet som tar mest felsökningstid. Du har ett fält som heter amount. Det kom tillbaka från ett API som "42" — en sträng, inte ett tal. Du sätter ett Number-villkor: amount > 40. Villkoret utvärderas som false. Varje gång. Inget felmeddelande.
Lösningen: använd antingen ett String-villkor och jämför mot "42" direkt (skörs), eller konvertera typen med ett expression i villkorsvärdet:
{{ Number($json.amount) > 40 }}
Sätt villkorstypen till Boolean och kontrollera att det är lika med true. Det är mer explicit och klarar JSON-fält som anländer som strängar.
True och False måste båda kopplas
IF-noden har två utgångar: True och False. Kopplar du bara en av dem, försvinner items som lämnar via den okopplade utgången. Inget fel kastas. n8n tappar dem tyst. Koppla alltid båda utgångarna, även om False-vägen bara är en NoOp-nod medan du bygger.
När Switch är bättre
IF-noden ger dig två utgångar. Behöver du tre (200 → lyckad, 400 → klientfel, 500 → serverfel), kedjar du antingen två IF-noder eller använder Switch-noden. Switch stöder obegränsat antal utgångar knutna till ett fältvärde och blir mer läsbar från tredje grenen.
Använd IF när beslutet är binärt. Använd Switch när det inte är det.
Vanliga frågor
Kan jag använda expressions inuti IF-villkor?
Ja. I villkorsvärdefältet, ange {{ expression }}-syntax. Det låter dig anropa funktioner som Number(), $json.field.toLowerCase(), eller jämförelseexpressions som returnerar ett booleskt värde.
Vad händer om ett villkor kastar ett körtidsfel?
Noden misslyckas för det itemet och n8n markerar det som en felexekvering. Använd Error Trigger-noden för att fånga dessa på workflödesnivå.
Kan jag invertera True/False-utgångarna?
Inte direkt. Invertera din villkorslogik (växla equals till not equals) eller byt vilka downstream-noder du kopplar till varje utgång.