Logon8n中文教程

条件逻辑

学习如何在工作流中使用条件逻辑,让自动化更智能

条件逻辑

条件逻辑是让工作流变得智能的关键。通过条件判断,你可以根据不同的情况执行不同的操作,让自动化流程更加灵活和强大。

🎯 核心概念

IF 节点

IF 节点是 N8N 中最常用的条件判断节点,它可以:

  • 根据条件将数据流分成两个分支
  • 支持复杂的逻辑表达式
  • 处理多种数据类型比较

Switch 节点

Switch 节点适合多分支条件判断:

  • 支持多个输出分支
  • 可以设置默认分支
  • 适合复杂的路由逻辑

📊 IF 节点详解

基本语法

// 基本比较
{{ $json.temperature > 30 }}

// 字符串比较  
{{ $json.status === "success" }}

// 数组长度检查
{{ $json.items.length > 0 }}

// 字段存在性检查
{{ $json.email !== undefined }}

比较运算符

运算符说明示例
===严格相等{{ $json.status === "active" }}
!==严格不等{{ $json.type !== "admin" }}
>大于{{ $json.score > 80 }}
>=大于等于{{ $json.age >= 18 }}
<小于{{ $json.price < 100 }}
<=小于等于{{ $json.count <= 10 }}

逻辑运算符

// AND 逻辑
{{ $json.age >= 18 && $json.status === "active" }}

// OR 逻辑
{{ $json.type === "premium" || $json.score > 90 }}

// NOT 逻辑
{{ !$json.isBlocked }}

// 复合逻辑
{{ ($json.age >= 18 && $json.hasLicense) || $json.isVIP }}

🔄 实战案例:智能客户分类

创建一个根据客户数据自动分类的工作流:

场景描述

根据客户的购买金额、注册时间和VIP状态,自动分配不同的营销策略。

工作流设计

HTTP Webhook → IF(VIP检查) → IF(金额检查) → IF(时间检查) → 发送邮件

步骤一:VIP 状态检查

// IF 节点条件
{{ $json.isVIP === true }}

True 分支:VIP 客户流程 False 分支:普通客户流程

步骤二:购买金额分类

// 高价值客户
{{ $json.totalAmount >= 10000 }}

// 中等价值客户  
{{ $json.totalAmount >= 1000 && $json.totalAmount < 10000 }}

// 低价值客户
{{ $json.totalAmount < 1000 }}

步骤三:注册时间判断

// 计算注册天数
{{ Math.floor((new Date() - new Date($json.registerDate)) / (1000 * 60 * 60 * 24)) }}

// 新客户(注册不足30天)
{{ Math.floor((new Date() - new Date($json.registerDate)) / (1000 * 60 * 60 * 24)) < 30 }}

🎛️ Switch 节点进阶

多分支路由示例

// 根据订单状态路由
switch ($json.orderStatus) {
  case "pending":
    return 0; // 分支 0:待处理
  case "processing": 
    return 1; // 分支 1:处理中
  case "shipped":
    return 2; // 分支 2:已发货
  case "delivered":
    return 3; // 分支 3:已送达
  default:
    return 4; // 分支 4:异常状态
}

按数值范围分类

// 根据分数分等级
const score = $json.score;
if (score >= 90) return 0;      // A级
else if (score >= 80) return 1; // B级  
else if (score >= 70) return 2; // C级
else if (score >= 60) return 3; // D级
else return 4;                  // F级

🧮 高级条件表达式

字符串匹配

// 包含检查
{{ $json.email.includes("@gmail.com") }}

// 开头检查
{{ $json.productCode.startsWith("PRO") }}

// 正则表达式匹配
{{ /^[A-Z]{2,3}-\d{4}$/.test($json.orderNumber) }}

// 大小写不敏感匹配
{{ $json.city.toLowerCase() === "beijing" }}

数组操作

// 数组包含检查
{{ $json.tags.includes("urgent") }}

// 数组长度
{{ $json.items.length > 5 }}

// 数组查找
{{ $json.products.find(p => p.category === "electronics") }}

// 数组过滤
{{ $json.orders.filter(o => o.status === "active").length > 0 }}

日期时间条件

// 今天的订单
{{ new Date($json.orderDate).toDateString() === new Date().toDateString() }}

// 工作日检查(周一到周五)
{{ new Date().getDay() >= 1 && new Date().getDay() <= 5 }}

// 营业时间检查(9:00-18:00)
{{ const hour = new Date().getHours(); hour >= 9 && hour < 18 }}

// 月初检查
{{ new Date().getDate() <= 3 }}

🎨 可视化条件设计

使用表达式编辑器

  1. 点击条件字段旁的表达式图标
  2. 选择字段:从下拉菜单选择要比较的字段
  3. 选择操作:选择比较运算符
  4. 输入值:设置比较的目标值
  5. 预览结果:查看条件表达式

条件组合技巧

// 复杂业务逻辑示例
{{
  // VIP客户或高消费客户
  ($json.isVIP === true) || 
  // 或者消费金额超过5000且评分高于4.5
  ($json.totalAmount > 5000 && $json.rating > 4.5) ||
  // 或者是最近的新客户且完成了首单
  (Math.floor((new Date() - new Date($json.registerDate)) / (1000 * 60 * 60 * 24)) < 7 && 
   $json.firstOrderCompleted === true)
}}

🔧 最佳实践

1. 条件命名

给复杂条件起有意义的名字:

// 不好的写法
{{ $json.a > 100 && $json.b < 50 }}

// 好的写法
{{ 
  const highValue = $json.amount > 100;
  const lowRisk = $json.riskScore < 50;
  return highValue && lowRisk;
}}

2. 错误处理

在条件中加入错误处理:

// 安全的字段访问
{{ $json.user?.profile?.age >= 18 }}

// 默认值处理
{{ ($json.score || 0) >= 80 }}

// 类型检查
{{ typeof $json.amount === 'number' && $json.amount > 0 }}

3. 性能优化

避免在条件中进行复杂计算:

// 不好的写法(每次都重新计算)
{{ expensiveCalculation($json.data) > threshold }}

// 好的写法(在前面的Set节点中预先计算)
{{ $json.calculatedValue > threshold }}

📈 实战项目:智能库存预警

需求分析

  • 库存低于安全线时发送预警
  • 根据商品类别设置不同预警级别
  • 工作日和节假日使用不同通知方式

实现方案

1. 数据获取

// 从数据库获取库存数据
SELECT product_id, category, current_stock, safety_stock, is_hot_item
FROM inventory 
WHERE current_stock <= safety_stock * 1.2

2. 预警级别判断

// Switch 节点:根据库存紧急程度分类
const stockRatio = $json.current_stock / $json.safety_stock;
const isHotItem = $json.is_hot_item;

if (stockRatio <= 0.2 || (stockRatio <= 0.5 && isHotItem)) {
  return 0; // 紧急预警
} else if (stockRatio <= 0.5) {
  return 1; // 重要预警  
} else {
  return 2; // 一般预警
}

3. 通知方式选择

// IF 节点:判断是否为工作时间
const now = new Date();
const isWorkday = now.getDay() >= 1 && now.getDay() <= 5;
const isWorkHour = now.getHours() >= 9 && now.getHours() < 18;

// 工作时间用钉钉,其他时间用邮件
{{ isWorkday && isWorkHour }}

🎯 常见问题

Q: 条件表达式不生效?

A: 检查以下几点:

  • 数据类型是否正确(字符串 vs 数字)
  • 字段名是否存在拼写错误
  • 是否使用了正确的比较运算符

Q: 如何调试复杂条件?

A: 使用以下技巧:

  • 在 Set 节点中分步构建条件
  • 使用 console.log() 输出中间值
  • 在测试模式下查看数据结构

Q: 条件太复杂如何优化?

A: 考虑:

  • 将复杂逻辑拆分成多个简单条件
  • 使用 Code 节点编写 JavaScript 函数
  • 在数据库层面预处理条件

🚀 下一步学习

掌握条件逻辑后,你可以继续学习:

  1. 循环迭代 - 处理批量数据
  2. 数据转换 - 格式化和处理数据
  3. 错误处理 - 提高工作流稳定性

条件逻辑让你的工作流变得真正智能。继续练习和探索,你会发现更多有趣的应用场景!