表达式#
表达式是n8n所有节点中实现的一项强大功能。它们允许根据以下数据动态设置节点参数:
- 之前的节点执行记录
- 工作流
- 您的n8n环境
您还可以在表达式中执行JavaScript代码,这是一种便捷且简单的方式,无需编写大量额外代码即可将数据处理成有用的参数值。
n8n创建并使用了一种名为Tournament的模板语言,并通过自定义方法和变量以及数据转换函数对其进行了扩展。这些功能使得执行常见任务(如从其他节点获取数据或访问工作流元数据)变得更加容易。
n8n 还支持两个库:
n8n 中的数据
在编写表达式时,理解n8n中的数据结构和行为会很有帮助。有关在工作流中处理数据的更多信息,请参阅数据。
编写表达式#
要使用表达式来设置参数值:
- 将鼠标悬停在你想要使用表达式的参数上。
- 在固定/表达式切换中选择表达式。
- 在参数中编写您的表达式,或选择打开表达式编辑器
来打开表达式编辑器。如果使用表达式编辑器,您可以在变量选择器中浏览可用数据。所有表达式都遵循{{ your expression here }}格式。
示例:从webhook正文获取数据#
考虑以下场景:您有一个通过webhook正文接收数据的webhook触发器。您希望提取其中一些数据以在工作流中使用。
您的webhook数据看起来类似这样:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | |
在工作流的下一个节点中,您只想获取city的值。您可以使用以下表达式:
1 | |
这个表达式:
- 使用n8n的自定义变量
$json访问传入的JSON格式数据。 - 查找
city的值(在本例中为"New York")。请注意,此示例使用JMESPath语法查询JSON数据。您也可以将此表达式写成{{$json['body']['city']}}。
示例:编写更长的JavaScript代码#
表达式包含一行JavaScript代码。这意味着您无法执行变量赋值或多个独立操作等操作。
要理解JavaScript在表达式中的局限性,并开始思考解决方法,请看以下两段代码。这两个代码示例都使用Luxon日期时间库来计算两个日期之间相差的月数,并将代码包裹在handlebar括号中,就像一个表达式。
然而,第一个示例不是一个有效的n8n表达式:
1 2 3 4 5 6 7 8 9 10 11 | |
虽然第二个示例是有效的:
1 | |
常见问题#
有关表达式的常见错误或问题及建议解决步骤,请参阅常见问题。