n8n 中文系列教程_03. 核心逻辑节点详解:四大案例带你玩转流程控制

一、逻辑节点概述与分类

对于任何编程语言的学习者,逻辑判断与流程控制都是必修课。在n8n可视化工作流开发中,流程控制节点扮演着编程语言中if/else、循环等核心逻辑的角色。这些节点集中归类于Flow类目下,共包含9种核心控制节点:

节点名称功能描述
Filter数据过滤,根据条件筛选输入项
If条件分支,将数据流分为True/False两个分支
Loop Over Items迭代处理,逐项执行子流程并汇总结果
Merge数据合并,整合多个分支数据
Compare Datasets数据集对比,决策最终输出
Execute Workflow子流程调用,执行其他工作流
Stop and Error异常终止,中断流程并抛出错误
Switch多路路由,实现复杂条件分支
Wait延时控制,规避API速率限制

二、四大核心节点实战案例

1. 单条件分支处理(IF节点)

场景需求:处理Google Sheets中的文章数据,对含"评论"的标题进行特殊处理

实现方案

  1. 配置Google Sheets节点读取原始数据

  2. 添加If节点设置过滤条件:

    {{ $json['标题'] }} contains "评论"
  3. 输出面板显示True Branch(85条)和False Branch(2710条)

进阶技巧

  • 支持AND/OR逻辑组合:

    ({{ $json['标题'] }} contains "评论") AND ({{ $json['阅读量'] }} > 1000)
  • 支持6种数据类型判断(字符串、数字、日期等)

2. 多条件路由分发(Switch节点)

场景需求:对"评论"、"高质量"、"要闻"三类文章分别处理

实现方案

  1. 配置Switch节点添加三个条件分支:

    Rule1: {{ $json['标题'] }} contains "评论"
    Rule2: {{ $json['标题'] }} contains "高质量" 
    Rule3: {{ $json['标题'] }} contains "要闻"
     
  2. 默认采用串联模式(首次匹配优先)

  3. 开启并联模式:Settings → Send data to all matching outputs

性能对比

模式执行效率数据重复适用场景
串联模式互斥分类
并联模式允许多标签重叠分类

3. 多分支数据聚合(Merge节点)

场景需求:合并三个处理分支的结果写入数据库

实现步骤

  1. 使用两次Merge节点级联合并:

    Merge1(分支A+B) → Merge2(合并结果+C)
     
  2. 选择Append合并模式:

    • 要求所有分支数据结构完全一致

    • 保留原始数据顺序

合并模式对照表

模式数据结构要求输出结果特征
Append完全一致简单纵向堆叠
Combine字段互补横向字段合并
Merge by position顺序严格对应按位置强制合并

4. 循环控制与批处理(Loop节点)

场景需求:安全获取多个RSS源内容

常规方案

  • 多数节点内置循环处理(自动遍历数组)

  • 特殊需求需显式使用Loop Over Items:

    Batch Size = 10 // 每批处理量
     

批处理优势

  1. 性能控制:限制并发数量

  2. 容错机制:单批次失败不影响整体

  3. 频率控制:配合Wait节点实现速率限制

实战配置

三、最佳实践建议

  1. 性能优化:优先使用节点内置循环,减少显式Loop使用

  2. 错误处理:关键节点后接Stop and Error阻断异常传播

  3. 调试技巧:利用节点右侧执行面板查看实时数据流

资料推荐


四、案例详解

案例1: Workflow 中对包含“评论”单独处理

我有一张数据表,其中一列是文章标题,我希望在后续的 Workflow 中对包含“评论”的内容单独处理,我该如何操作?(IF 节点用法)

解释:

在这个 case 中,我们使用了 If 节点,使用它来判断标题中是否存在“评论”两个字。

整个 Workflow 首先从给定的 Google Sheets 中读取所有数据,然后在 If 节点里,我们添加了一个 Conditions(条件),这个 Condition 是以 {{ $json['标题'] }} 为判断源,如果它 contains(包含)“评论”二字,就返回 true,否则就返回 false。

在 Output 面板,我们可以看到后续 Workflow 被分为了 True Branch(85 个 item)和 False Branch(2710 个 item)。

测试运行后,回到编辑器页面,我们会看到,对应 True Branch 的 85 个数据被分流到了上面的分叉,False Branch 的分流到了下面的分叉,方便我们可以做后续不同的处理。

  1. If 的 Conditions 有好多种逻辑,支持字符串、数字、日期与时间、布朗、数组和对象字段类型的判断,这里只做最简单的介绍。对应的判断逻辑你可以在需要的时候自行尝试,或在 n8n 官方文档中查阅。
  2. If 支持多个 Conditions 之间用 AND(且)与 OR(或)连接。比如你可以在一个 If 中设置它判断“包含评论”且“包含高质量”,或者实质它判断“包含评论”或“包含高质量”。
  3. 分批处理数据,以控制 Workflow 的性能消耗;
  4. 你十分确定输入进来的数据有时会导致节点运行错误,你希望在某一行运行错误的情况下,剩下的行依然能继续处理;
  5. 你希望控制数据处理的频度,以保障第三方 API 可以正常运行。

案例2:对“包含评论”、“包含高质量”、”包含要闻“的内容分别单独处理

我有一张数据表,其中一列是文章标题,我希望在后续的 Workflow 中对“包含评论”、“包含高质量”、”包含要闻“的内容分别单独处理,我该如何操作?(Switch 节点用法)

经过 If 的学习,你应该会意识到,这个案例中的判断,其实可以通过设置多层 If 来实现。比如先处理包含评论的,再处理包含高质量的,最后再处理包含要闻的。但这样会增加 Workflow 的复杂程度,还会降低它的运行效率。因此,在面临这种需要处理两个以上分叉路径的逻辑时,我们就可以用更复杂的 Switch 来处理。

Switch 节点支持你添加多个判断逻辑,它会根据每个判断逻辑将匹配的数据送往对应的分叉。可以看到,在我们运行之后,数据流被分为了三叉,分别是标题里有评论的,标题里有高质量的和标题里有要闻的。

在默认情况下,Switch 节点遵循串联的判断模式,也就是它会按照你在参数页面配置路由规则的上下顺序,从上到下判断。一条数据如果已经被匹配到了分叉 1,它就不会再出现在分叉 2 里,哪怕它也符合分叉 2 的判断逻辑。

如果,你需要 Switch 节点在各路由规则之间采用并联方式判断,那么你需要在 Options 里开启 Send data to all matching outputs。这样的话,一条数据在同时满足分叉 1 和分叉 2 的情况下,它就会同时出现在两个分叉里。

案例3:合并回一个数据流写进库里

我从数据表中筛选出了对“包含评论”、“包含高质量”和”包含要闻“的内容,我现在分别对他们的数据处理已经完成,现在希望把它们合并回一个数据流写进库里,怎么办?(Merge 节点用法)

在这里,我们需要使用 Merge 节点。

由于 Merge 节点一次只能合并两个分叉,所以我们要合并两次,先合并两个,再将第三个与已经合并后的分叉进行合并。

由于我们的三个分叉出来的数据流在 表头(属性) 上是一致的,因此我们可以直接选择 Append 作为合并模式。

Merge 节点支持三种合并模式,官方文档给出了详细的解释,直接看图会更加清晰:

AppendCombineMerge by position

Merge by position

简答来说:

Append - 直接将分叉 2 的数据加在分叉 1 的后面,适用于表头 表头(属性) 完全一致的两个分叉合并。

Combine - 将分叉 2 与分叉 1 同一索引的不同表头(属性)合并到一起,比如:分叉 2 里有姓名和年龄,分叉 1 里有姓名和性别,通过 Combine,你就能获得一个包含姓名、年龄和性别的数据表。

Merge by Position - 按分叉 2 和分叉 1 的数据位置,直接把两个数据强加在一起。适用范围比较窄,我想不到啥用处。

案例4:从多个 RSS 处获取内容怎么办?(Loop 节点用法)

n8n 中支持 Loop Over Items 节点来创造一个循环。但是,在大部分情况下你不需要该节点来创造循环。

哈哈,是不是被绕晕了?

事情是这样的,当我们在日常编程的时候,我们如果需要对一个数据表中的每一行进行处理,我们首先想到的是需要构造一个循环,但对于 n8n 来说它考虑到了这种常见用法,因此许多 n8n 中的节点是内置循环的。

比如,上游节点传来了一个包含 10 行包含 URL 的数据表,你在当前节点想用 RSS Read 读取这 10 个 RSS 地址里的内容,你实际上不需要用到 Loop Over Items。在默认情况下,当你就将一个数组变量拖动到当前节点的时候,当前节点就会将数组变量中的每一行都执行一遍:

如果你想让某个节点在处理某个数组变量里的值时,只运行一次,你需要在节点的 Settings 页面打开 Execute Once 选项。

n8n 节点中的内置循环,甚至包含了依据条件结束循环,你只需要这样连接一个 If 节点即可:

在这个官方示例中,If 的 Ture 分叉被指回了 Twitter 节点的输入端。而 If 节点中的判断条件为:

{{$runIndex}} Smaller 4

这意味着,在 Twitter 节点被运行到第 5 次时,节点会进入 false 分叉结束循环。

这个示例 Workflow 的结果是,会自动在 Twitter 上发送 5 遍 Hello from n8n!

但是,在一些特殊的情况下(比如想要分批处理),我就想用 Loop 来构造循环怎么办?

在这个 Workflow 中,我们就添加了一个 Loop Over Items,它会将上游传递过来的 URL,分批次循环执行 RSS Read。当所有的批次执行完毕之后,数据被合并推送到 done 分叉,执行后续的循环外操作。

与直接用 RSS Read 内置循环的区别是,在这里我将 Loop Over Items 的 Batch Size 参数设置为了 10。这意味着,它会首先将上游传递过来的数据,拆分成 10 行一包,每次只向循环中的 RSS Read 发送 10 包。这时,如果我在循环内加一个 Wait 节点,并且设置为 Wait 1 分钟,就可以有效的控制每分钟只对 10 个 RSS 地址发起请求,拉长请求间隔,避免被对方服务器封禁。

根据官方说明,建议使用 Loop Over Items 的场景有:

  1. 分批处理数据,以控制 Workflow 的性能消耗;
  2. 你十分确定输入进来的数据有时会导致节点运行错误,你希望在某一行运行错误的情况下,剩下的行依然能继续处理;
  3. 你希望控制数据处理的频度,以保障第三方 API 可以正常运行。

如果觉得有帮助,欢迎点赞⭐收藏!接下来会持续更新n8n系列教程。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值