简介

每个真实场景下的工作流最终都会遇到分岔路口:仅当交易金额超过 10,000 美元时才发送通知,根据订单状态以不同方式处理订单,当字段为空时跳过某个步骤。n8n 通过条件分支来处理所有这些场景——根据工作流中实际流动的数据,将执行路由到不同的路径。

n8n 为此提供了两个节点:IF 节点用于二元的是/否决策,Switch 节点用于需要两种以上结果的场景。知道该选用哪一个,以及如何精确配置条件,是区分脆弱工作流与生产级稳定工作流的关键。

流程图:单个输入节点通过 IF 节点拆分为两条路径——一条标注为 TRUE,一条标注为 FALSE,各自连接到不同的动作节点

IF 节点:二元分支

IF 节点根据输入数据评估一个或多个条件,并将每个数据项路由到 TRUE 输出或 FALSE 输出。数据不会同时进入两个分支——每个数据项只能选择一条路径。

配置时,你需要从输入数据中选取一个值(通常是字段引用,例如表达式语法),选择一个运算符,并设置一个比较值。n8n 针对不同数据类型支持多种运算符:

字符串类型:等于、不等于、包含、以……开头、以……结尾、正则匹配。数字类型:等于、不等于、大于、小于、大于等于、小于等于。布尔类型:为 true、为 false。数组和对象类型:为空、不为空。

下面是一个简单示例:webhook 接收订单数据,你需要将高价值订单路由到一个特殊的 Slack 频道。

在 IF 节点中你可以这样设置:值 1 —— 引用订单金额字段的表达式;运算 —— 大于;值 2 —— 10000。

金额超过 10,000 的数据项从 TRUE 输出离开,其余数据项从 FALSE 输出离开。然后你可以将每个输出连接到各自的下游节点。

你可以在一个 IF 节点内叠加多个条件,使用 AND(全部必须通过)或 OR(任一通过即可)。请注意,当条件超过三个时,AND 链会变得难以阅读——此时拆分为顺序的 IF 节点,或改用 Switch 节点,通常会更清晰。

Switch 节点:多种结果

当你有超过两条可能的路由时,堆叠 IF 节点会很快变得混乱。Switch 允许你定义多条规则,每条规则对应一个输出,自上而下进行评估。第一个匹配的规则胜出,数据项从该输出离开。

Switch 还有一个 Fallback(兜底)输出——没有任何规则匹配的数据项会落入这里。务必为兜底输出连接一个节点,哪怕只是一个 No Operation 节点,这样你就能知道未匹配的数据项发生了什么。

一个实际示例:你接收支持工单,并希望按优先级进行路由。

json
Rule 1: priority equals "critical" → Output 0 → PagerDuty node
Rule 2: priority equals "high" → Output 1 → Slack node
Rule 3: priority equals "low" → Output 2 → Email node
Fallback → Output 3 → Log to spreadsheet

在 n8n 中,每条规则的配置方式与 IF 条件相同——选择一个字段、选择一个运算符、设置一个比较值。区别在于,每条规则在节点上拥有自己独立的编号输出连接器。

流程图:Switch 节点具有一个输入和四条输出分支,分别标注为 critical、high、low 和 fallback,各自连接到不同的动作节点

有一个值得了解的细节:默认情况下,Switch 节点只会将每个数据项路由到第一条匹配的规则。如果你启用「Send data to all matching outputs」(将数据发送到所有匹配的输出)开关,数据项可以同时从多个输出离开。这在某些场景下很有用,但如果没预料到这种行为,可能会导致下游动作重复执行——除非你明确需要扇出行为,否则建议保持关闭。

常见错误

类型不匹配是导致静默失败的最常见原因。如果传入字段包含字符串 "1500",而你使用数字运算符「Greater Than」(大于)将其与 1000 比较,根据数据来源的不同,n8n 可能不会自动将字符串转换为数字。请使用 Set 节点或类似 `parseInt()` 的表达式在分支判断之前对类型进行规范化。

另一个常见错误是将 IF 节点的 FALSE 输出或 Switch 节点的 Fallback 输出保持未连接。n8n 不会抛出错误——这些数据项只会从执行中悄然消失。在处理客户记录的工作流中,这类静默丢弃的问题日后往往很难调试。请为每个输出都连接上某个节点,哪怕只是一个最简的日志记录步骤。

还要注意空值或 null 字段。将 null 值与「等于某个字符串」进行比较,结果为 false,这通常是符合预期的——但「is empty」和「is not empty」的行为与「等于空字符串」并不相同。请使用实际的 null 负载进行测试,而不仅仅是空字符串。

总结

当你的决策是二元的——TRUE 或 FALSE、是或否、匹配或不匹配——请使用 IF 节点。当你需要三种或更多不同的结果,并希望获得清晰、独立的输出路径,而无需链式连接多个 IF 节点时,请使用 Switch 节点。在这两种情况下,请始终显式处理未匹配的路径、在比较之前对数据类型进行规范化,并使用边界场景的输入(null、空字符串、意外类型)进行测试,然后再部署到生产环境。这两个节点是任何真正执行条件逻辑的工作流的基石。

课后练习

课程检查点

巩固所学知识,获取作业反馈。

0/7
01n8n 中 IF 节点的两个输出路径是什么?
02什么时候应该优先选择 Switch 节点而非链式连接多个 IF 节点?
03在 Switch 节点中,没有匹配到任何已定义规则的数据项会怎样?
04将 IF 节点的 FALSE 输出保持未连接会有什么风险?
05你有一个以字符串 "1500" 形式传入的字段,并使用数字运算符「Greater Than」将其与 1000 比较。最安全的做法是什么?
06在 Switch 节点上启用「Send data to all matching outputs」会有什么效果?
07在单个 IF 节点内使用 AND 逻辑组合多个条件时,数据项走上 TRUE 路径需要满足什么?
已回答 · 0/7
第 1 课:使用 IF 和 Switch 节点进行条件分支