跳转到内容

表达式语法入门 · {{ }} 与 fx 模式

第 3 章 · 第 1 节

表达式是 n8n 给静态节点装上的动态引擎。学会用它,节点的参数就能根据上游数据自动变化——这是从”写死的工作流”升级到”智能的工作流”的关键一跃。

每个节点参数输入框都有一个 fx 小按钮(右上角)。点一下切换:

🔀 fixed-vs-expr.txt
【固定值模式】 输入: Hello World 发送: Hello World (字面量,不解释) 输入: {{ $json.name }} 发送: {{ $json.name }} (依然是字面量,不执行) 【表达式模式 fx】 输入: ={{ $json.name }} 发送: Alice (执行后的结果) 输入: =Hello {{ $json.name }}! 发送: Hello Alice! (混合字面量 + 表达式)

记忆口诀:表达式模式下的字符串= 开头——n8n 看到 = 才知道”这一整串里可能含表达式,扫一遍”。固定值模式下整串原样发送。

{{ ... }} 双花括号里写任意 JavaScript 表达式,不是某种自定义 DSL:

💻 js-expressions.txt
{{ 1 + 1 }} → 2 {{ "hello".toUpperCase() }} → HELLO {{ [1,2,3].reduce((a,b)=>a+b) }} → 6 {{ new Date().getFullYear() }} → 2026 {{ true && 'yes' }} → yes {{ $json.x > 10 ? 'big' : 'small' }} → big / small

整个 JS 标准库都能用。所以表达式 ≈ JavaScript 的 inline 模板。

{{ }} 里可以用普通 JS 变量名(其实是 n8n 注入的全局对象):

变量含义
$json当前正在处理的 Item 的 JSON
$('NodeName')引用另一个节点(拿它的输出)
$node['NodeName']同上,老语法(已不推荐)
$now当前时间(Luxon DateTime 对象)
$today今天 00:00(Luxon DateTime)
$workflow当前 workflow 元信息(id/name/active)
$execution本次 execution 元信息(id/mode)
$env环境变量(自托管才有)
$input节点的输入(多输入节点常用)
$itemIndex当前 item 在数组里的下标(从 0 起)

表达式编辑器(点 fx 后的弹出框)

Section titled “表达式编辑器(点 fx 后的弹出框)”

很多输入框点 fx 后会弹出一个表达式编辑器——左边写表达式,右边实时显示求值结果。这是新手最该学会的工具:

expr-editor.txt
┌──────────────────────────┬─────────────────────┐ │ Expression │ Result │ │ │ │ │ Hello {{ $json.name }}! │ Hello Alice! │ │ │ │ │ {{ $now.toISO() }} │ 2026-05-13T10:23.. │ │ │ │ │ {{ $json.age + 1 }} │ 31 │ └──────────────────────────┴─────────────────────┘ 错误时右边会显示红色错误信息,方便定位。

调试任何表达式都先在这里跑通,再放回节点里。

{{ ... }} 里只允许写表达式,不能写 if/for。但可以包一个立即执行函数:

🎯 iife-expr.txt
{{ (() => { const items = $json.items; let total = 0; for (const it of items) total += it.price; return total; })() }}

但这么写就太丑了——复杂逻辑用 Code 节点

🎯 multi-expr.txt
=Hello {{ $json.first }} {{ $json.last }}, you are {{ $json.age }} years old.

每个 {{ }} 单独求值,结果拼回字符串。

3 · 表达式调用 n8n 内置工具函数

Section titled “3 · 表达式调用 n8n 内置工具函数”

n8n 注入了一些便捷工具:

🔧 helpers.txt
{{ $now.minus({ days: 7 }).toISO() }} → 7 天前的 ISO 时间 {{ $jmespath($json, 'items[*].name') }} → JMESPath 查询 {{ $randomString(8) }} → 随机 8 位串 {{ $fromAI('field', 'description') }} → 在 AI Tool 节点里取参数
✅ 该用❌ 不该用
URL/路径里插入上游数据表达式里写超过 3 行逻辑(用 Code 节点)
字段值动态拼接多分支判断(用 IF / Switch 节点)
简单条件值(三元运算符)数据库查询(用 SQL 节点)
时间/字符串格式化循环大数据(用 SplitInBatches)
  • 两种模式:固定值(字面量)vs 表达式 fx(动态求值)
  • 表达式模式下字符串以 = 起头,{{ ... }} 内是任意 JavaScript
  • n8n 注入的全局变量:$json / $('Name') / $now / $workflow
  • 调试表达式去表达式编辑器实时看结果
  • 复杂逻辑用 Code 节点;多分支用 IF/Switch

下一节深入讲引用其他节点数据的语法细节