简介
在 n8n 中连接多个服务时,一个 API 的原始数据很少能直接匹配下一个 API 所期望的格式。你需要重塑字段、过滤掉无关记录,并根据条件将数据路由到不同分支。n8n 提供了三个核心节点用于此类操作:Set(用于简单的字段映射)、Function(用于自定义 JavaScript 逻辑)和 IF(用于条件路由)。掌握这些节点,能将线性工作流转变为智能的多路径自动化。
使用 Set 节点重塑数据
Set 节点允许你创建新字段或重命名现有字段,无需编写代码。它是简单转换的首选工具,例如提取嵌套属性、合并字段或添加静态值。
假设一个 webhook 传递了以下 payload:
你需要将其发送到一个 CRM,该 CRM 期望字段为 `full_name` 和 `amount`。在 webhook 之后添加一个 Set 节点,配置两个字段:`full_name` 使用表达式 `{{json.user.firstName}} {{json.user.lastName}}`,`amount` 使用 `{{$json.orderTotal}}`。输出变为:
Set 节点支持使用双花括号的表达式。你可以引用 `node['NodeName'].json` 来获取另一个节点的输出,以及使用 `today` 等内置函数。对于算术或字符串运算,可以在花括号内编写普通 JavaScript:`{{$json.price * 1.1}}` 表示加价 10%。

使用 Function 节点实现自定义逻辑
当 Set 节点的表达式变得难以处理时,可以切换到 Function 节点。它运行任意 JavaScript,让你完全控制输入数组。该节点接收 `items`(一个对象数组,每个对象都有一个 `json` 属性),并必须以相同结构返回一个数组。
示例:过滤掉金额低于 100 美元的订单,并添加折扣等级:
上述代码会就地修改 items 数组。对于复杂的转换,你可以对 items 进行 map 遍历并返回一个新数组:
Function 节点可以访问 Node.js 标准库以及一些辅助函数,例如 `$input.all()` 用于获取所有传入项目。除非你理解 Promise 的处理方式,否则应避免使用异步操作;若需在函数内部进行 API 调用,请改用 HTTP Request 节点并将它们串联起来。
使用 IF 节点进行条件路由
IF 节点将你的工作流分为两个分支:true 和 false。它针对每个项目评估一个或多个条件,并将匹配的项目发送到对应的路径。
在数据源之后添加一个 IF 节点。如果比较金额,则将条件类型设置为 `Number`;文本匹配使用 `String`;标志位使用 `Boolean`。你可以使用 AND/OR 逻辑组合多个条件。
示例工作流:一个 Typeform webhook 发送调查回复。使用 IF 节点设置条件 `{{$json.score}} > 8`。将 true 输出连接到一个 Slack 节点,将正面反馈发布到某个频道;将 false 输出连接到一个 Google Sheets 节点,用于记录待审核的问题。
IF 节点不会修改数据,只负责路由。如果需要在路由前进行转换,请将 Set 或 Function 节点放置在 IF 节点之前。如果两个分支都需要执行相同的后续操作,可以使用 Merge 节点将它们合并(选择 "Append" 模式以合并输出)。
在多服务工作流中组合节点
真实的工作流会将这些节点串联起来。典型模式:Webhook → Function(清理数据)→ IF(按类型路由)→ Set(格式化为 API A 所需格式)→ HTTP Request(发送到 API A),false 分支则为 Set(格式化为 API B 所需格式)→ HTTP Request(发送到 API B)。
常见错误:忘记每个节点独立处理项目。如果 Function 节点过滤掉了某些项目,下游节点只能看到剩余的项目。如果后续还需要原始数据,请在 Function 节点中将其存入变量,或在早期使用 Set 节点复制你需要的字段。
另一个陷阱:Set 节点中复杂的表达式会静默失败。务必使用 Execute Workflow 进行测试,并检查每个节点的输出。如果表达式返回 undefined,则该字段会从输出中省略。可以使用 `{{$json.field || 'default'}}` 来提供默认值。
总结
Set 节点处理简单的字段映射和表达式。Function 节点提供完整的 JavaScript 控制能力,用于过滤、聚合和复杂转换。IF 节点根据条件将数据路由到不同路径。将它们组合起来,可以构建智能适应传入数据的工作流。始终使用真实样本数据执行工作流,检查中间输出,然后再连接到正式服务,以验证转换是否正确。
课程检查点
巩固所学知识,获取作业反馈。