AI TOOLS

EP02. “Nodes 与数据处理”

首页 AI 工具 n8n · EP02
约 16 分钟· #EP02#n8n
🔒 登录后可标记已读
  • 接着 EP01,讲 n8n 工作流的基本组成单位——Node(节点)
  • 讲节点的类型、结构、几个最常用的核心节点,还有怎么在节点之间处理和转换数据
  • 讲 n8n 里的 Expressions(表达式)、Variables(变量)怎么用,以及怎么整合第三方服务
  • 前置知识:先看过 EP01,知道 n8n 是什么、Trigger/Core/Action 三种节点大分类怎么分

重点内容


什么是 Node(节点)

Node 是 n8n 工作流的基本构成单位,每个节点代表一个具体任务或动作(比如从 API 取数据、处理信息、发邮件)。把节点连起来,就定义了自动化流程的顺序和逻辑。

节点类型:

  1. Trigger Node(触发节点):根据特定事件或排程启动工作流,图标是橙色闪电符号
    • Webhook Trigger:指定 URL 被调用时启动
    • Execute Workflow Trigger:被另一个工作流调用时启动
    • Gmail Trigger:收到邮件时启动
  2. Regular Node(一般节点):执行数据获取、转换、传送等动作
    • HTTP Request Node:对外部 API 发 HTTP 请求
    • Filter Node:按设定条件过滤数据
    • Merge Node:合并/追加两组数据集

节点的组成:

  • 参数(Parameters):定义节点行为的设置(API 端点、认证信息等)
  • 输入/输出数据:从前面的节点接收数据,再传给后面的节点
  • 凭据(Credentials,不一定都有):安全访问外部服务需要的认证信息

节点之间靠"连接"来串起数据流和执行顺序——前一个节点的输出,就是下一个节点的输入。

[截图:n8n 编辑器画布,橙色闪电图标的 Trigger Node 连接到后续几个一般节点]


几个最常用的核心节点

节点作用
Edit Fields (Set) Node在工作流内定义和处理数据,设置静态或动态值供后续节点使用
Code Node执行自定义 JavaScript,处理复杂的数据转换和逻辑
HTTP Request Node对外部 API 发请求,支持 GET/POST/PUT/DELETE 等方法
Merge Node合并多个节点的数据,支持按索引或按 key 合并
Split Out把单一输入拆成多个 item,方便逐个处理
Aggregate把多个 item 合并成单一输出(分组/汇总数据)
Limit限制处理或往后传递的 item 数量

实际用法举例:Edit Fields Node 用来定义默认值或统一格式;Code Node 用来做标准节点覆盖不到的自定义计算/格式化;HTTP Request Node 用来从 REST API 抓数据丰富工作流信息;Merge Node 用来整合两个不同来源的数据一起处理。


理解 n8n 的数据结构(JSON)

n8n 里每个节点输出的都是一组 JSON 对象数组,每个最外层对象叫一个 "Item"。默认情况下,每个节点会对输入进来的每一个 item 都执行一次设定好的动作。

JSON 基本组成:

  • 键值对:{ "name": "John", "age": 30 }
  • 数组:[ "item1", "item2", "item3" ]
  • 嵌套对象:{ "customer": { "name": "John", "email": "john@example.com" } }

访问嵌套数据的两种方式:

  • 相对引用(Relative Referencing):用 $json 访问紧邻前一个节点的数据,例如 {{$json["customer"]["name"]}}
  • 绝对引用(Absolute Referencing):用 $node["NodeName"].json 访问指定某个前面节点的数据,例如 {{$node["Webhook"].json["data"]["order"]["id"]}}

用 Set Node 定义/修改数据

Edit Fields (Set) Node 让你在工作流内定义和修改数据字段:

  • 静态数据:加入预先定义好的固定值,比如加一个常量 "company": "N8N Inc." 供后续节点用
  • 动态数据:把进来的数据映射转换成新字段,比如输入 {"orderId": "12345"},用 Set Node 输出成 {"Order_ID": "12345"}

使用步骤:把 Edit Fields (Set) Node 加进工作流 → 在 "Values" → "Add Field" 底下定义字段 → 用类似 {{$json["fieldName"]}} 的表达式映射动态数据。

[截图:Edit Fields (Set) Node 设置面板,显示 Values 区块下 Add Field 新增字段的界面]


Expressions(表达式)怎么用

Expressions 让你动态访问、转换、使用节点里的数据,运作逻辑很像"邮件合并"——占位符会被工作流里的实际值替换掉。

  • 访问当前节点数据{{$json["field"]}},例如 {{$json["firstName"]}} 取出当前节点数据里的 "firstName" 字段
  • 访问前面节点的数据{{$node["NodeName"].json["field"]}},例如 {{$node["Webhook"].json["order"]["id"]}} 取出 Webhook 节点输出的 order 对象里的 id 字段
  • 组合字段和文字Hello {{ $json["firstName"] }} 会输出 "Hello John."

💡 把 Expressions 想成"邮件合并"能帮助理解它的弹性所在,不管是懂技术还是不懂技术的人都容易上手。实际应用比如组合动态文字做邮件标题:{{$json["firstName"] + " placed order #" + $json["orderId"]}}


用 Code Node 做进阶数据处理

Code Node 让你写自定义 JavaScript 做复杂的数据转换,只要输出符合 n8n 要求的格式(对象数组,或空数组)就行。

范例:

// 转换时间戳成可读格式
return [{ date: new Date($json["timestamp"]).toLocaleString() }];

// 过滤数组,取出符合条件的项目
return $json["items"].filter(item => item.price > 50);

// 做计算
return [{ totalPrice: $json["quantity"] * $json["unitPrice"] }];

使用步骤:把 Code Node 加进工作流 → 在 "Code" 区块写 JavaScript → 用 return 输出转换后的数据(对象数组或空数组)。

[截图:Code Node 编辑器界面,左侧写 JavaScript 代码,右侧实时预览输出结果]

📌 一定要确保输出符合 n8n 期望的格式:return [{ key1: "value1" }]; 是合法输出,return []; 也是合法的空输出。


Variables(变量)与访问数据的写法

变量作用
$json当前节点的数据,最常用来访问节点内的输入数据
$node访问工作流里其他节点的输出数据,引用前面节点数据时特别有用
$workflow提供当前工作流的信息(名称、ID),可用于日志记录或根据工作流元数据做条件判断
$env访问 n8n 实例里设置的环境变量,适合管理不同环境(开发/预备/生产)间会变动的配置值

访问数据的写法:

  • 点记法(Dot Notation):属性名简单(不含空格/特殊字符/不以数字开头)时用,例如 {{$json.customer.name}}
  • 方括号记法(Square Bracket Notation):属性名含空格/特殊字符/或是动态变量时用,例如 {{$json["customer name"]}}
  • 访问其他节点的数据{{$node["PreviousNodeName"].json["fieldName"]}},把 "PreviousNodeName" 换成实际节点名称

实际例子:假设一个叫 "Webhook" 的节点收到这样的 JSON:

{
  "order": {
    "id": "12345",
    "customer": { "name": "Jane Doe", "email": "jane.doe@example.com" },
    "items": [{ "product": "Laptop", "quantity": 1, "price": 1200 }]
  }
}

要在后续节点取出客户邮箱:{{$node["Webhook"].json["order"]["customer"]["email"]}}

最佳实践:

  • 节点和字段命名保持一致、有描述性,让表达式更容易读懂和维护
  • 访问嵌套属性时留意 null/undefined 的情况,可以用可选链(例如 {{$json?.customer?.name}})防止属性不存在时报错
  • 用 n8n 的表达式编辑器测试和验证表达式,确认结果符合预期再实际用到工作流里

整合第三方服务

n8n 能跟各种第三方服务无缝整合,实现跨平台的自动数据交换和流程管理。

整合方式:

  1. 预建节点:n8n 提供 Google Sheets、Slack、Trello 这类热门服务的内建节点,简化连接和互动的流程
  2. HTTP Request Node:没有专属节点的服务,用这个节点配置 HTTP 方法、headers、payload 就能跟任何 API 互动
  3. 自定义节点:针对现有节点没覆盖到的整合需求,开发自定义节点,还能发布成 community node 分享给其他人

认证方式:

  • OAuth2:Google、Facebook 这类服务常用的安全授权方式
  • API Keys:服务提供的简单令牌,用来验证请求
  • Basic Authentication:用用户名+密码组合访问

常见错误

  • ❌ Code Node 输出的格式不符合 n8n 要求——一定要是对象数组(或空数组),格式不对会导致工作流出错
  • ❌ 访问嵌套数据时没考虑到某个属性可能不存在——用可选链(?.)能防止这种情况直接报错中断
  • ❌ 分不清相对引用($json)和绝对引用($node["NodeName"])该用哪个——只需要当前/前一个节点的数据用相对引用,需要指定某个特定节点的数据用绝对引用
  • ❌ 属性名带空格或特殊字符还用点记法访问——这种情况必须改用方括号记法($json["customer name"]),点记法会读不到
  • 💡 表达式写完不确定对不对,直接用 n8n 内建的表达式编辑器先测试验证一次,再套进实际工作流

Sources

Blog / Website:

  1. The Ultimate n8n Starter Kit (2025) — Nate Herk | AI Automation Society