还在用多个Filter硬扛?Switch节点才是多路分流的“高速公路”
笔者在 N8N大学 交流群里潜水时,发现很多刚入坑的朋友遇到多条件判断时,习惯像堆乐高一样,把一堆 Filter(过滤器)节点串联起来。
比如:“如果状态是A,走这条路;如果状态是B,走那条路;如果状态是C,走第三条路……” 于是你的工作流里堆满了 5、6 个 Filter 节点,看着像一团乱麻的毛线球。
这不仅难维护,而且一旦逻辑需要微调,简直就是一场噩梦。今天,笔者就带大家彻底搞懂 n8n 中的 Switch 节点,它才是处理多路分流的“高速公路”。
Switch 节点:工作流中的智能交通指挥官
Switch 节点在 n8n 的官方文档里被归类为“Logic”(逻辑)类,它的核心作用只有一个:根据不同的条件,将数据流导向不同的输出端口(Output)。
我们可以把它想象成一个十字路口的红绿灯系统:
- 输入端:接收来自 Webhook、数据库查询等上游节点的数据(车辆)。
- 逻辑判断:根据你设置的表达式(交通规则)。
- 输出端:将数据分流到不同的分支(通往不同目的地的车道)。
相比 Filter 节点只能判断“是”或“否”(0 或 1),Switch 节点可以处理“多选一”甚至“多选多”的复杂场景。
核心实操:3种条件表达式写法详解
在实战之前,我们需要先理解 Switch 节点中最关键的设置:Rules(规则)。点击节点后,你会看到一个“Add Rule”按钮,这里就是我们发挥逻辑能力的战场。
写法一:基础比较(等于、不等于、包含)
这是最常用的场景,适用于状态判断、关键词过滤等。
实战案例: 假设我们有一个订单数据流,需要根据 status 字段进行分流。
- 在 Switch 节点的 Rules 配置区,点击 Add Rule。
- 第一个规则设置:Field 填
json.status,Operation 选择String下的equal,Value 填paid。 - 点击下方的 Add Rule 按钮,新增第二个规则:Field 填
json.status,Operation 选择String下的equal,Value 填pending。
设置后,数据流会从 Output 1(对应规则1)流出,Output 2(对应规则2)流出,剩下的未匹配数据则从 Output 3(默认)流出。
写法二:JS表达式(JavaScript Expression)—— 进阶玩法
当简单的比较无法满足需求时(比如需要复杂的数学计算、数组遍历或正则匹配),你需要切换到 JS 表达式模式。
实战案例: 判断用户年龄是否大于 18 且会员等级大于 2。
- 在 Switch 节点的 Rules 中,将 Mode 切换为 JS Expression。
- 在输入框中编写逻辑:
{{ $json.age > 18 && $json.vip_level > 2 }}。 - 注意:JS 表达式返回的是布尔值(true/false)。如果返回 true,数据流向 Output 1;如果返回 false,流向 Output 2。
这里有个坑:有些朋友喜欢直接写 return true,但在 n8n 的 Switch 节点里,你只需要写表达式本身,不需要写 return 关键字。
写法三:多条件组合与混合模式
有时候,你需要同时满足多个条件才走某条路,或者满足任意一个条件就走某条路。
实战案例: 筛选出“上海地区”且“金额超过1000”的订单,或者“北京地区”且“金额超过2000”的订单。
在这个场景下,单纯用 JS 表达式会显得很臃肿。我们可以利用 Switch 节点的多个 Output 并行处理:
- Output 1 规则:
{{ $json.city == '上海' && $json.amount > 1000 }} - Output 2 规则:
{{ $json.city == '北京' && $json.amount > 2000 }}
如果数据同时满足 Output 1 和 Output 2 的条件(虽然这个案例里逻辑互斥,但有些场景允许重叠),你可以在 Switch 节点的设置里开启 Keep Missing Connections 或者调整规则逻辑,确保数据能正确流向多个分支。
实战案例:电商工单自动分发系统
为了让大家更直观地理解,我们来看一个完整的实战案例:电商客服工单自动分发系统。
场景描述: 收到用户提交的工单,根据“用户等级”和“问题类型”将工单分配给不同的客服组。
工作流结构:
- Webhook 节点: 接收来自网站的工单 JSON 数据(包含 user_level, issue_type 字段)。
- Switch 节点: 核心分流逻辑。
- HTTP Request 节点: 分别对接不同的客服系统 API(如钉钉群机器人、Slack、邮件系统)。
Switch 节点详细配置:
- 规则 1 (Output 1 - VIP绿色通道):
Field:json.user_level, Operation:equal, Value:gold
逻辑: 无论什么问题,VIP用户直接走绿色通道。 - 规则 2 (Output 2 - 技术故障):
Field:json.issue_type, Operation:equal, Value:bug
逻辑: 普通用户的技术问题。 - 规则 3 (Output 3 - 咨询类):
Field:json.issue_type, Operation:equal, Value:consult
逻辑: 咨询类问题。
配置完成后,连接不同的 HTTP Request 节点到 Output 1、2、3,分别发送消息到不同的 Slack 频道。Output 4(默认)则可以连接一个“未知问题”节点,通知人工介入。
避坑指南:Switch 节点的 3 个常见误区
在 N8N大学 的实战教学中,Switch 节点虽然好用,但也有几个容易让人抓狂的“坑”。
1. 数据格式不匹配导致分流失败
问题: 你的规则是 equal 比较数字 1,但上游传来的数据是字符串 "1"。
现象: 数据全部流向了默认输出(Output 3),没有进入预期的分支。
解决: 在 Switch 节点之前,加一个 Set 节点 或 Function 节点,强制转换数据类型。比如用 JS 写 item.json.id = Number(item.json.id)。
2. 误以为数据只能走一条路
问题: 默认情况下,Switch 节点的规则是互斥的,一条数据命中一个规则后就会停止判断。
解决: 如果你希望一条数据同时触发多个分支(例如同时发送邮件和写入数据库),你需要使用 多个 Switch 节点 分别处理,或者在逻辑设计上使用 Route by (All) 模式(如果版本支持),但在 n8n 的标准逻辑中,通常建议用多个 Filter 或 Switch 节点串联来实现复杂的“与/或”逻辑。
3. 忽略了默认输出的处理
问题: 很多新手配置了规则后,忘了连接默认的 Output 3(灰色连线),导致不符合规则的数据直接丢失。
解决: 强迫症请治一治!一定要给默认输出接上逻辑。哪怕只是接一个 IF 节点 判断是否需要记录日志,或者接一个 No-Op 节点作为占位符,也不要让连线悬空。
FAQ:关于 Switch 节点,你可能还想问
Q1:Switch 节点和 Filter 节点有什么区别?我该用哪个?
A:简单二选一用 Filter,多路分流用 Switch。如果你的逻辑是“如果 A 则继续,否则停止”,用 Filter。如果你的逻辑是“如果 A 走左边,B 走中间,C 走右边”,用 Switch。Switch 节点本质上是多个 Filter 的并行组合。
Q2:Switch 节点支持正则表达式吗?
A:支持。你可以在 Rules 的 Operation 中选择 Regex,或者在 JS 表达式模式中使用 /pattern/.test(value)。这在处理复杂的文本匹配(如提取邮件标题中的特定前缀)时非常有用。
Q3:为什么我的 Switch 节点无法处理空值?
A:n8n 的 JavaScript 表达式在处理 null 或 undefined 时可能会报错。建议在编写表达式前,先用一个 Set 节点给关键字段设置默认值,例如 {{ $json.status || 'unknown' }}。
总结与资源
Switch 节点是 n8n 自动化工作流中的逻辑骨架。掌握它,意味着你不再受限于简单的“是/否”判断,而是可以构建出复杂的、多分支的自动化系统。
从今天起,试着把你工作流里那串“糖葫芦”一样的 Filter 节点拆掉,换成一个优雅的 Switch 节点吧。如果你在实操过程中遇到了奇怪的 Bug,欢迎随时来 N8N大学 找笔者交流。
相关推荐: