如果说 n8n 是一个自动化的积木系统,那么**节点(Node)**就是这些积木的基本单元。这篇教程将帮你快速理解 n8n 中的各种节点类型,让你从初学者晋升为自动化高手!
想象你要从家里寄送一个包裹到另一个城市。这个过程包括多个步骤:
在 n8n 中,每一个步骤都对应一个节点,而整个寄包过程就是一个工作流(Workflow)。
节点的本质:每个节点都是一个独立的功能单元,接收来自上一个节点的数据,进行处理,然后传递给下一个节点。节点之间的连接形成了数据流。
触发器是工作流的起点,它决定了工作流何时开始运行。
| 触发器类型 | 功能 | 使用场景 |
|---|---|---|
| Webhook | 通过 HTTP 请求触发 | 接收第三方应用的数据,如表单提交、用户请求 |
| Cron(定时器) | 按照时间表自动触发 | 定时任务,如每天凌晨 2 点执行备份 |
| 手动触发(Manual Trigger) | 点击按钮手动执行 | 测试工作流、调试功能 |
| 应用事件(On app event) | 监听第三方应用的事件 | 当 Slack 收到消息、Google Sheet 被编辑时 |
实际例子:
动作是工作流的执行部分,它们代表具体的任务操作。
| 动作类型 | 功能 | 示例 |
|---|---|---|
| HTTP Request | 调用外部 API | 从天气 API 获取数据 |
| 发送邮件 | 发送电子邮件 | 发送通知邮件 |
| 数据库操作 | 读写数据库 | 从 MySQL 读取用户数据 |
| Set/Edit Field | 设置或修改数据字段 | 将接收到的数据添加新字段 |
| Function(函数) | 运行自定义 JavaScript 代码 | 复杂数据转换 |
核心节点(Core Nodes) 是 n8n 内置的基础节点,不依赖第三方服务,提供通用的数据处理和逻辑控制能力。这些节点是搭建任何工作流的基础。
作用:为工作流开放一个"入口",接收来自外部的 HTTP 请求
配置关键项:
- HTTP Method:选择 GET 或 POST
- Authentication:是否需要身份验证
- 自动生成的 URL:用于接收请求实际应用:
作用:创建、修改或删除数据字段
使用场景:清洗数据、添加新字段、数据转换例子:
输入数据:
{
"name": "张三",
"email": "zhangsan@example.com"
}
使用 Set 节点添加字段:
{
"name": "张三",
"email": "zhangsan@example.com",
"timestamp": "2025-11-29",
"processed": true
}作用:根据条件分支处理,类似编程中的 if-else
用法:设置条件,满足条件执行一个分支,不满足执行另一个分支例子:
IF: email 包含 "@vip.com"
THEN: 发送 VIP 欢迎邮件
ELSE: 发送普通欢迎邮件作用:合并来自多个分支的数据
用法:当工作流从一个点分成多个分支后,用 Merge 重新汇合作用:对数组中的每个元素重复执行相同操作
用法:处理多条数据时必用例子:
输入:[用户1, 用户2, 用户3]
处理:对每个用户都发送一封邮件作用:编写自定义 JavaScript 代码
用法:处理复杂的数据转换、自定义逻辑简单例子:
// 将收入的数据转换为大写
return items.map(item => {
item.json.name = item.json.name.toUpperCase();
return item;
});集群节点是多个节点的组合,作为一个整体提供功能。
例子:
Webhook 节点 (收取数据)
↓
Set 节点 (处理数据)
↓
IF 节点 (判断)
↙ ↖
[是] [否]
↓ ↓
发邮件 记录日志在任何节点的配置中,你可以使用表达式来引用前面节点的输出:
{{ $json.fieldName }} # 引用当前节点的字段
{{ $node["节点名称"].json.field }} # 引用其他节点的数据
{{ $now }} # 获取当前时间
{{ $randomString }} # 生成随机字符串在 n8n 中,连接外部服务需要凭证信息。
常见凭证类型:
安全特性:
构建一个简单的自动邮件欢迎系统:
步骤 1:添加 Webhook 节点
步骤 2:添加 Set 节点(数据处理)
步骤 3:添加 IF 节点(逻辑判断)
步骤 4:添加发邮件节点
步骤 5:合并分支(可选)
{
"nodes": [
{
"parameters": {
"path": "user-signup",
"responseMode": "onReceived",
"options": {}
},
"id": "webhook-node",
"name": "Webhook",
"type": "n8n-nodes-base.webhook",
"typeVersion": 2,
"position": [0, 0]
},
{
"parameters": {
"mode": "raw",
"jsonOutput": "{\"userType\": \"VIP\",\"receivedAt\": \"{{ $now }}\"}"
},
"id": "set-node",
"name": "Set Fields",
"type": "n8n-nodes-base.set",
"typeVersion": 3.4,
"position": [220, 0]
},
{
"parameters": {
"conditions": {
"string": [
{
"value1": "{{ $json.userType }}",
"value2": "VIP",
"operation": "equals"
}
]
}
},
"id": "if-node",
"name": "Check User Type",
"type": "n8n-nodes-base.if",
"typeVersion": 1,
"position": [440, 0]
},
{
"parameters": {
"respondWith": "text",
"responseBody": "{{ $json.userType }} 用户已处理"
},
"id": "respond-node",
"name": "Respond to Webhook",
"type": "n8n-nodes-base.respondToWebhook",
"typeVersion": 1.2,
"position": [660, 0]
}
],
"connections": {
"Webhook": {
"main": [
[{ "node": "Set Fields", "type": "main", "index": 0 }]
]
},
"Set Fields": {
"main": [
[{ "node": "Check User Type", "type": "main", "index": 0 }]
]
},
"Check User Type": {
"main": [
[{ "node": "Respond to Webhook", "type": "main", "index": 0 }],
[{ "node": "Respond to Webhook", "type": "main", "index": 0 }]
]
}
}
}Q1:什么时候用 If 节点,什么时候用 Switch 节点?
Q2:Function 节点和 Set 节点有什么区别?
Q3:如何调试工作流?
Q4:工作流执行失败了怎么办?
| 要点 | 说明 |
|---|---|
| 节点 | 工作流的基本构件,每个节点完成一个任务 |
| 触发器 | 决定工作流何时启动(Webhook、Cron、Manual) |
| 动作 | 具体的操作(发邮件、调用 API、数据处理) |
| 核心节点 | 内置的通用节点(Set、If、Function、Loop) |
| 数据流 | 数据从一个节点流向下一个节点的过程 |
| 表达式 | 使用 {{ }} 语法引用和转换数据 |
| 凭证 | 安全存储的身份认证信息 |
祝你使用 n8n 愉快!从今天开始,让重复的工作自动化,把时间投入到更有创意的事情上吧! 🚀
[1] 官方文档: https://docs.n8n.io/integrations/builtin/node-types/
[2] n8n系列教程: https://www.undsky.com/blog/?category=n8n教程#