Skip to content

表达式#

表达式是在所有 n8n 节点中实现的强大功能。它们允许根据以下数据动态设置节点参数:

  • 之前节点的执行结果
  • 工作流
  • 您的 n8n 环境

您还可以在表达式中执行 JavaScript,这使得操作数据成为有用的参数值成为一种方便且简单的方法,而无需编写大量额外代码。

n8n 创建并使用名为 Tournament 的模板语言,并使用自定义方法和变量数据转换函数对其进行扩展。这些功能使执行常见任务变得更容易,如从其他节点获取数据或访问工作流元数据。

n8n 还支持两个库:

  • Luxon,用于处理日期和时间。
  • JMESPath,用于查询 JSON。

n8n 中的数据

编写表达式时,了解 n8n 中的数据结构和行为很有帮助。有关在工作流中处理数据的更多信息,请参阅数据

编写表达式#

要使用表达式设置参数值:

  1. 将鼠标悬停在要使用表达式的参数上。
  2. 固定/表达式切换中选择表达式
  3. 在参数中编写您的表达式,或选择打开表达式编辑器 打开表达式编辑器图标 打开表达式编辑器。如果您使用表达式编辑器,可以在变量选择器中浏览可用数据。所有表达式的格式为 {{ your expression here }}

示例:从 webhook 主体获取数据#

考虑以下场景:您有一个通过 webhook 主体接收数据的 webhook 触发器。您想要提取其中一些数据以在工作流中使用。

您的 webhook 数据看起来类似于:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
[
  {
    "headers": {
      "host": "n8n.instance.address",
      ...
    },
    "params": {},
    "query": {},
    "body": {
      "name": "Jim",
      "age": 30,
      "city": "New York"
    }
  }
]

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

1
{{$json.body.city}}

此表达式:

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

示例:编写更长的 JavaScript#

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

以下代码使用 Luxon 日期和时间库来计算两个日期之间的月份差。我们用表达式的花括号和 IIFE 语法包装代码。

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

常见问题#

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