Logon8n中文教程

理解节点概念

深入了解N8N节点系统,掌握工作流的核心构建块

理解节点概念

节点是 N8N 工作流的基本构建块。每个节点代表一个特定的操作、服务或功能。理解不同类型的节点及其工作原理,是掌握 N8N 的关键。

🎯 节点基础概念

什么是节点?

节点是工作流中的一个执行单元,它可以:

  • 接收输入数据
  • 执行特定操作
  • 输出处理后的数据
  • 连接到其他节点

节点的组成部分

每个节点包含以下元素:

  • 输入连接点:接收来自其他节点的数据
  • 输出连接点:向其他节点发送数据
  • 配置面板:设置节点的参数和选项
  • 执行状态:显示节点的运行结果

🔗 节点类型详解

1. 触发节点 (Trigger Nodes)

触发节点是工作流的起点,它们监听事件或按计划启动工作流。

📅 定时触发器

Cron 节点

// 每天上午9点执行
"0 9 * * *"

// 每周一上午10点执行  
"0 10 * * 1"

// 每月1号中午12点执行
"0 12 1 * *"

Interval 节点

// 每5分钟执行一次
interval: 5 minutes

// 每2小时执行一次
interval: 2 hours

🔔 事件触发器

Webhook 节点

// 监听HTTP请求
POST https://your-n8n.com/webhook/user-signup
{
  "userId": "12345",
  "email": "[email protected]",
  "event": "signup"
}

File Trigger 节点

// 监听文件变化
path: "/uploads"
events: ["add", "change", "unlink"]

2. 动作节点 (Action Nodes)

动作节点执行具体的操作,如发送邮件、调用API、处理数据等。

📧 通讯节点

Gmail 节点

// 发送邮件配置
operation: "Send Email"
to: "{{ $json.email }}"
subject: "欢迎注册!"
body: "感谢您的注册..."

钉钉 节点

// 发送群消息
operation: "Send Message"
webhook: "your-dingtalk-webhook-url"
message: "系统告警:{{ $json.alertMessage }}"

🌐 API 集成节点

HTTP Request 节点

// GET 请求
method: "GET"
url: "https://api.github.com/users/{{ $json.username }}"

// POST 请求
method: "POST" 
url: "https://api.example.com/users"
body: {
  "name": "{{ $json.name }}",
  "email": "{{ $json.email }}"
}

💾 数据存储节点

MySQL 节点

-- 查询操作
SELECT * FROM users WHERE email = '{{ $json.email }}'

-- 插入操作
INSERT INTO orders (user_id, product_id, amount) 
VALUES ({{ $json.userId }}, {{ $json.productId }}, {{ $json.amount }})

3. 逻辑节点 (Logic Nodes)

逻辑节点控制工作流的执行路径和数据处理。

🔀 流程控制

IF 节点

// 条件判断
{{ $json.age >= 18 }}

// 复合条件
{{ $json.isVIP === true && $json.points > 1000 }}

Switch 节点

// 多路分支
switch ($json.status) {
  case "pending": return 0;
  case "approved": return 1; 
  case "rejected": return 2;
  default: return 3;
}

⏱️ 时间控制

Wait 节点

// 等待固定时间
amount: 5
unit: "minutes"

// 等待到特定时间
until: "2024-12-25T00:00:00Z"

Schedule Trigger 节点

// 工作日上午9点
rule: "0 9 * * 1-5"
timezone: "Asia/Shanghai"

4. 数据处理节点

🔧 数据转换

Set 节点

// 设置新字段
{
  "fullName": "{{ $json.firstName }} {{ $json.lastName }}",
  "email": "{{ $json.email }}",
  "createdAt": "{{ new Date().toISOString() }}",
  "isAdult": "{{ $json.age >= 18 }}"
}

Function 节点

// JavaScript 函数处理
const items = $input.all();
const processed = items.map(item => {
  return {
    ...item.json,
    processedAt: new Date().toISOString(),
    score: item.json.value * 2
  };
});
return processed;

Code 节点

// 复杂数据处理
for (const item of $input.all()) {
  const data = item.json;
  
  // 数据清洗
  const cleanedData = {
    id: data.id,
    name: data.name?.trim(),
    email: data.email?.toLowerCase(),
    phone: data.phone?.replace(/\D/g, ''),
    tags: data.tags?.filter(tag => tag.length > 0)
  };
  
  $return.push({ json: cleanedData });
}

📊 数据聚合

Aggregate 节点

// 按类别聚合
aggregation: {
  keys: ["category"],
  values: {
    totalSales: { field: "amount", operation: "sum" },
    avgPrice: { field: "price", operation: "average" },
    itemCount: { field: "id", operation: "count" }
  }
}

🔧 节点配置技巧

1. 表达式语法

N8N 使用双花括号语法来引用数据:

// 基本引用
{{ $json.fieldName }}

// 上一个节点数据
{{ $('NodeName').item.json.data }}

// 条件表达式
{{ $json.score > 80 ? 'Pass' : 'Fail' }}

// 数组操作
{{ $json.items.length }}
{{ $json.items[0].name }}

// 日期处理
{{ new Date().toISOString() }}
{{ new Date($json.date).getFullYear() }}

// 字符串操作
{{ $json.name.toUpperCase() }}
{{ $json.email.includes('@gmail.com') }}

2. 环境变量使用

// 引用环境变量
{{ $env.API_KEY }}
{{ $env.DATABASE_URL }}

// 条件使用环境变量
{{ $env.NODE_ENV === 'production' ? 'prod-server' : 'dev-server' }}

3. 错误处理配置

// 在节点设置中配置错误处理
Continue On Fail: true
Retry On Fail: 3
Retry Interval: 1000  // 毫秒

📋 实战示例:用户数据处理流水线

创建一个完整的用户数据处理工作流:

1. 数据输入 (HTTP Request)

// 从API获取用户数据
GET https://jsonplaceholder.typicode.com/users

2. 数据清洗 (Function)

const users = $input.all();
const cleanedUsers = users.map(user => {
  const data = user.json;
  return {
    id: data.id,
    name: data.name.trim(),
    email: data.email.toLowerCase(),
    phone: data.phone.replace(/\D/g, ''),
    company: data.company?.name || 'Unknown',
    address: `${data.address.city}, ${data.address.zipcode}`,
    website: data.website.startsWith('http') ? data.website : `https://${data.website}`
  };
});

return cleanedUsers.map(user => ({ json: user }));

3. 数据验证 (IF)

// 验证邮箱格式
{{ /^[^\s@]+@[^\s@]+\.[^\s@]+$/.test($json.email) }}

4. 数据分类 (Switch)

// 根据邮箱域名分类
const domain = $json.email.split('@')[1];
switch (domain) {
  case 'gmail.com': return 0;      // 个人用户
  case 'company.com': return 1;    // 企业用户
  default: return 2;               // 其他用户
}

5. 数据存储 (MySQL)

INSERT INTO users (name, email, phone, company, address, category, created_at)
VALUES (
  '{{ $json.name }}',
  '{{ $json.email }}', 
  '{{ $json.phone }}',
  '{{ $json.company }}',
  '{{ $json.address }}',
  '{{ $json.category }}',
  NOW()
)

🎯 节点选择指南

根据需求选择节点

需求类型推荐节点备选方案
定时执行CronSchedule Trigger
接收请求WebhookHTTP Request
发送邮件GmailSMTP
数据库操作MySQL/PostgreSQLHTTP Request + API
文件处理Read/Write Binary FileGoogle Drive
数据转换SetFunction
条件判断IFSwitch
API调用HTTP Request专用API节点

性能优化建议

// 1. 减少不必要的数据传递
// 只选择需要的字段
.select(['id', 'name', 'email'])

// 2. 批量处理数据
// 使用批量操作而不是循环单个处理
INSERT INTO table VALUES 
{{ $json.items.map(item => `('${item.name}', '${item.email}')`).join(',') }}

// 3. 合理使用缓存
// 在Function节点中缓存重复计算结果
const cache = new Map();

🚀 下一步学习

现在你已经理解了节点的基本概念,可以继续学习:

  1. 数据流转 - 了解数据在节点间的传递
  2. 触发器与动作 - 深入学习触发机制
  3. 条件逻辑 - 构建智能工作流

节点是 N8N 的核心概念。通过合理组合不同类型的节点,你可以构建出强大而灵活的自动化工作流。继续实践和探索,发现更多节点的强大功能!