跳到主要内容

表达式#

表达式是所有 n8n 节点中实现的强大功能,支持基于以下数据动态设置节点参数:

  • 先前节点的执行结果
  • 工作流数据
  • n8n 运行环境

您还可以在表达式中执行 JavaScript 代码,这为将数据转换为有效参数值提供了便捷途径,无需编写大量额外代码。

n8n 创建并采用名为 Tournament 的模板语言,并通过自定义方法与变量数据转换函数进行功能扩展。这些特性让常见任务(如从其他节点获取数据或访问工作流元数据)的操作更加简便。

n8n 还兼容两个功能库:

  • Luxon - 用于处理日期和时间
  • JMESPath - 用于查询 JSON 数据

n8n 中的数据

编写表达式时,理解 n8n 的数据结构与行为模式将大有裨益。更多关于工作流数据处理的信息,请参阅数据指南

编写表达式#

要通过表达式设置参数值:

  1. 将鼠标悬停至目标参数区域
  2. 固定值/表达式切换中选择表达式
  3. 在参数输入框内直接编写表达式,或点击打开表达式编辑器 表达式编辑器图标 启动专用编辑器。使用表达式编辑器时,可通过变量选择器浏览可用数据。所有表达式均需遵循 {{ 此处填写表达式 }} 的格式。

示例:从 Webhook 正文获取数据#

假设存在以下场景:您有一个通过 Webhook 正文接收数据的 Webhook 触发器,需要提取其中部分数据供工作流使用。

Webhook 数据结构示例如下:

[
{
"headers": {
"host": "n8n.instance.address",
...
},
"params": {},
"query": {},
"body": {
"name": "Jim",
"age": 30,
"city": "New York"
}
}
]

在工作流的下一节点中,您需要仅获取 city 字段的值。可以使用以下表达式:

 {{$json.body.city}}

该表达式:

  1. 使用 n8n 自定义的 $json 变量访问传入的 JSON 格式数据。
  2. 获取 city 的值(此示例中为 "New York")。注意此示例使用 JMESPath 语法查询 JSON 数据,也可写作 {{$json['body']['city']}}

示例:编写较长 JavaScript 代码#

在表达式中可执行变量赋值或多语句操作,但需使用 IIFE(立即调用函数表达式)语法包装代码。

以下代码使用 Luxon 日期时间库计算两个日期之间相隔的月数。我们同时采用表达式的手把括号和 IIFE 语法来包裹代码。

{{(()=>{
let end = DateTime.fromISO('2017-03-13');
let start = DateTime.fromISO('2017-02-13');
let diffInMonths = end.diff(start, 'months');
return diffInMonths.toObject();
})()}}

常见问题#

关于表达式的常见错误或问题及建议解决步骤,请参阅常见问题