表达式#
表达式是所有 n8n 节点中实现的强大功能,支持基于以下数据动态设置节点参数:
- 先前节点的执行结果
- 工作流数据
- n8n 运行环境
您还可以在表达式中执行 JavaScript 代码,这为将数据转换为有效参数值提供了便捷途径,无需编写大量额外代码。
n8n 创建并采用名为 Tournament 的模板语言,并通过自定义方法与变量及数据转换函数进行功能扩展。这些特性让常见任务(如从其他节点获取数据或访问工作流元数据)的操作更加简便。
n8n 还兼容两个功能库:
n8n 中的数据
编写表达式 时,理解 n8n 的数据结构与行为模式将大有裨益。更多关于工作流数据处理的信息,请参阅数据指南。
编写表达式#
要通过表达式设置参数值:
- 将鼠标悬停至目标参数区域
- 在固定值/表达式切换中选择表达式
- 在参数输入框内直接编写表达式,或点击打开表达式编辑器
启动专用编辑器。使用表达式编辑器时,可通过变量选择器浏览可用数据。所有表达式均需遵循 {{ 此处填写表达式 }}的格式。
示例:从 Webhook 正文获取数据#
假设存在以下场景:您有一个通过 Webhook 正文接收数据的 Webhook 触发器,需要提取其中部分数据供工作流使用。
Webhook 数据结构示例如下:
[
{
"headers": {
"host": "n8n.instance.address",
...
},
"params": {},
"query": {},
"body": {
"name": "Jim",
"age": 30,
"city": "New York"
}
}
]
在工作流的下一节点中,您需要仅获取 city 字段的值。可以使用以下表达式:
{{$json.body.city}}
该表达式:
- 使用 n8n 自定义的
$json变量访问传入的 JSON 格式数据。 - 获取
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();
})()}}
常见问题#
关于表达式的常见错误或问题及建议解决步骤,请参阅常见问题。