📤n8n内建变量与方法

type
status
date
slug
summary
tags
category
icon
password
author
标签
第三方接入
在使用 n8n 的过程中,我们会发现 n8n 虽然是一个低代码平台,但在节点间数据传递,数据转换,数据处理的时候,难免还是需要一些微小的代码碎片。
如果你与 ChatGPT 结对编程,当然可以把这些代码碎片交给 AI 去生成,但对于一些快捷变量和方法,还是自己记住会更快一些。
本文,就是对 n8n 内置变量与方法的介绍与教程。
本篇教程通过将 n8n 官方文档的相关部分投喂 Google Gemini 1.5 Pro 后生成,部分示例可能存在错误。
💡
提示: 本教程中的所有变量、方法、数据转化快捷方式,在 n8n 中生效的前提,是将文本框修改为 Expression 模式,并且包裹在 {{ }}中哦:
notion image
如果你在按照本文进行操作时遇到了问题,可以访问官方原始文档查阅准确信息:

一、内建变量

概述

n8n 提供了丰富的内建变量,让你能够轻松访问工作流的执行环境、节点数据、以及 n8n 平台自身的信息。这些变量就像预设的快捷方式,让你无需编写复杂的代码即可获取所需信息,从而简化工作流的构建过程。
主要功能:
  • 访问节点的输入和输出数据。
  • 获取工作流的执行状态和参数。
  • 读取环境变量和用户自定义变量。
  • 获取当前时间和日期。
  • 在 HTTP 节点中使用分页变量。
  • 在 LangChain 代码节点中使用特定变量。

各类型变量详解

当前节点输入 (Current node input)

这些变量用于访问当前节点的输入数据,例如:
  • $input.item: 表示当前正在处理的输入项,包含了该项的所有数据。
  • $input.all(): 返回一个包含所有输入项的数组。
  • $input.first(): 返回第一个输入项。
  • $input.last(): 返回最后一个输入项。
  • $input.params: 包含前一个节点的查询设置,例如操作类型、结果限制等。
  • $json: $input.item.json 的简写形式,用于访问输入项的 JSON 数据。
  • $binary: $input.item.binary 的简写形式,用于访问输入项的二进制数据。
  • $input.context.noItemsLeft: 布尔值,仅在使用 “循环项” 节点时可用,用于判断是否还有剩余项需要处理。
使用示例:

其他节点输出 (Output of other nodes)

使用 $("<node-name>") 相关方法可以访问其他节点的输出数据,例如:
  • $("<node-name>").all(branchIndex?, runIndex?): 返回指定节点的所有输出项。
  • $("<node-name>").first(branchIndex?, runIndex?): 返回指定节点的第一个输出项。
  • $("<node-name>").last(branchIndex?, runIndex?): 返回指定节点的最后一个输出项。
  • $("<node-name>").item: 返回与当前项链接的指定节点的输出项。
  • $("<node-name>").params: 包含指定节点的查询设置。
  • $("<node-name>").context: 布尔值,仅在使用 “循环项” 节点时可用。
  • $("<node-name>").itemMatching(currentNodeInputIndex): 在代码节点中用于代替 $("<node-name>").item,用于追溯输入项的来源。
使用示例:

n8n 元数据 (n8n metadata)

这些变量用于访问 n8n 平台自身的信息,例如:
  • $env: 包含 n8n 实例的配置环境变量。
  • $execution.customData: 用于设置和获取自定义执行数据。
  • $execution.id: 当前工作流执行的唯一 ID。
  • $execution.mode: 执行模式,例如 testproduction
  • $execution.resumeUrl: 用于恢复等待节点的 webhook URL。
  • $getWorkflowStaticData(type): 获取工作流的静态数据。
  • $("<node-name>").isExecuted: 检查指定节点是否已执行。
  • $itemIndex: 当前项在列表中的索引。
  • $nodeVersion: 当前节点的版本号。
  • $prevNode.name: 前一个节点的名称。
  • $prevNode.outputIndex: 前一个节点的输出连接器的索引。
  • $prevNode.runIndex: 前一个节点的运行索引。
  • $runIndex: 当前节点的运行次数。
  • $secrets: 包含外部密钥的信息。
  • $vars: 包含当前环境中可用的变量。
  • $version: n8n 节点的版本号。
  • $workflow.active: 工作流是否处于活动状态。
  • $workflow.id: 工作流的 ID。
  • $workflow.name: 工作流的名称。
使用示例:

日期和时间 (Date and time)

  • $now: 表示当前时间的 Luxon 对象。
  • $today: 表示今天日期的 Luxon 对象 (不包含时间)。
使用示例:

HTTP 节点变量 (HTTP node variables)

这些变量仅在 HTTP 节点中可用,用于处理分页请求,例如:
  • $http.pagination.page: 当前页码。
  • $http.pagination.perPage: 每页的项目数。
  • $http.pagination.total: 总项目数。
  • $http.pagination.totalPages: 总页数。
使用示例:

LangChain 代码节点方法 (LangChain Code node methods)

这些变量仅在 LangChain 代码节点中可用,例如:
  • $llmInput: LLM 模型的输入数据。
  • $generateText: 用于生成文本的函数。
  • $memory: 用于管理对话记忆的变量。
使用示例:

使用示例

以下是一些使用内建变量的示例:
1. 获取当前节点的输入数据:
2. 获取前一个节点的输出数据:
3. 获取当前工作流的名称:
4. 获取当前时间:

二、内建方法

概述

方法是一个基础的编程概念,你可以简单将其理解为一些已经预制的、不需要自己手动编排的任务。
除了丰富的内建变量,n8n 还提供了一些实用的内建方法,用于执行特定的操作,例如对 JSON 数据进行查询、表达式求值、条件判断等。这些方法可以帮助你更高效地处理数据,简化工作流的逻辑,并提升整体的可读性和可维护性。

各类型方法详解

JMESPath 方法 (JMESPath method): $jmespath()

$jmespath() 方法允许你使用 JMESPath 查询语言对 JSON 数据进行搜索和过滤。JMESPath 是一种强大的查询语言,可以让你轻松地从复杂的 JSON 数据中提取所需的信息。
语法:
  • expression: JMESPath 查询表达式,用于指定要提取的数据。
  • data: 要查询的 JSON 数据。
功能:
  • 从 JSON 数据中提取指定字段的值。
  • 根据条件筛选 JSON 数据。
  • 对 JSON 数据进行排序和分组。
  • 执行各种数据转换操作。
使用示例:
假设你有一个包含用户信息的 JSON 数据:
你可以使用 $jmespath() 方法提取所有用户的邮箱地址:
这将返回一个包含所有邮箱地址的数组:
你还可以使用 $jmespath() 方法筛选出 ID 大于 1 的用户:
这将返回一个包含符合条件的用户的数组:

便利方法 (Convenience methods)

n8n 提供了一些便捷方法,用于简化常见的操作,例如:
  • $evaluateExpression(expression, itemIndex?): 将字符串作为表达式进行求值。
    • expression: 要执行的表达式字符串。
    • itemIndex: 可选参数,指定要使用的输入项的索引。默认为 0。
    • 使用示例:
  • $ifEmpty(value, defaultValue): 如果 value 为空,则返回 defaultValue,否则返回 value
    • value: 要检查的值。
    • defaultValue: 如果 value 为空则返回的默认值。
    • 使用示例:
  • $if(condition, valueIfTrue, valueIfFalse): 根据条件返回不同的值。
    • condition: 要评估的条件。
    • valueIfTrue: 如果条件为真则返回的值。
    • valueIfFalse: 如果条件为假则返回的值。
    • 使用示例:
  • $max(number1, number2, ...): 返回多个数字中的最大值。
    • number1, number2, ...: 要比较的数字。
    • 使用示例:
  • $min(number1, number2, ...): 返回多个数字中的最小值。
    • number1, number2, ...: 要比较的数字。
    • 使用示例:

使用示例

以下是一些在表达式和代码节点中使用内建方法的示例:
表达式示例:
代码节点 (JavaScript) 示例:

三、数据转换函数

概述

在编程的过程中,变量有不同的类型。比如同样用肉眼看起来的 2024-08-01,在作为字符串类型时,就可以在它的后面加入更多文字,在作为日期类型时,就可以做时间的增减操作。
将数据转换成指定的类型,就是数据转换函数所要做的事情,否则在做对应数据处理的时候会出现错误。
使用场景:
  • 数据清洗: 将不规范的数据转换为符合要求的格式。
  • 数据格式化: 将数据转换为易于阅读和理解的格式。
  • 数据处理: 对数据进行筛选、排序、聚合等操作。
  • 跨平台数据交互: 将不同平台的数据转换为统一的格式。
优势:
  • 简化代码: 无需编写复杂的代码,即可完成各种数据转换操作。
  • 提高效率: n8n 平台对这些函数进行了优化,可以快速执行操作。
  • 易于维护: 使用标准化的函数,可以提高代码的可读性和可维护性。

各类型数据转换函数详解

n8n 的数据转换函数根据数据类型进行分类,主要包括以下几种:

数组 (Arrays)

用于操作数组类型的数据,例如:
  • array.contains(value): 检查数组是否包含指定的值。
  • array.filter(callback): 根据回调函数筛选数组元素。
  • array.join(separator): 将数组元素连接成字符串。
  • array.map(callback): 对数组元素进行映射操作。
  • array.slice(start, end): 截取数组的一部分。
  • array.sort(callback): 对数组元素进行排序。
  • array.unique(): 返回数组中唯一值的数组。

布尔值 (Booleans)

用于操作布尔类型的数据,例如:
  • boolean.toString(): 将布尔值转换为字符串 "true" 或 "false"。

日期 (Dates)

用于操作日期类型的数据,例如:
  • date.addDays(days): 在日期上添加指定天数。
  • date.addHours(hours): 在日期上添加指定小时数。
  • date.addMinutes(minutes): 在日期上添加指定分钟数。
  • date.addMonths(months): 在日期上添加指定月数。
  • date.addYears(years): 在日期上添加指定年数。
  • date.format(format): 将日期格式化为指定的字符串。
  • date.getDay(): 获取日期是星期几 (0 - 6)。
  • date.getMonth(): 获取日期是几月 (0 - 11)。
  • date.getYear(): 获取日期是哪一年。

数字 (Numbers)

用于操作数字类型的数据,例如:
  • number.toFixed(digits): 将数字格式化为指定位数的小数。
  • number.toString(): 将数字转换为字符串。

对象 (Objects)

用于操作对象类型的数据,例如:
  • object.keys(): 获取对象的所有键名。
  • object.values(): 获取对象的所有键值。

字符串 (Strings)

用于操作字符串类型的数据,例如:
  • string.contains(substring): 检查字符串是否包含指定的子字符串。
  • string.length(): 获取字符串的长度。
  • string.toLowerCase(): 将字符串转换为小写。
  • string.toUpperCase(): 将字符串转换为大写。
  • string.trim(): 去除字符串两端的空格。
  • string.replace(search, replace): 替换字符串中的指定内容。
  • string.split(separator): 将字符串分割成数组。

使用示例

以下是一些使用数据转换函数的示例:
1. 将字符串转换为数字:
2. 将日期格式化为 YYYY-MM-DD 格式:
3. 获取数组的第一个元素:
4. 检查字符串是否包含指定的子字符串:
5. 将对象转换为 JSON 字符串:

四、附录:常用变量和方法速查表

为了方便你快速查找和用 n8n 内建变量与方法,我们在这里提供一个常用变量和方法的速查表。
常用变量:
变量
描述
示例
$input.item
当前处理的输入项
$input.item.json.name
$input.all()
所有输入项
$input.all().map(item => item.json.id)
$input.first()
第一个输入项
$input.first().json.title
$input.last()
最后一个输入项
$input.last().json.description
$json
输入项的 JSON 数据
$json.email
$binary
输入项的二进制数据
$binary.data
$("<node-name>").first()
指定节点的第一个输出项
$("HTTP Request").first().json.data
$("<node-name>").item
与当前项链接的指定节点的输出项
$("Create Record").item.json.id
$env
环境变量
$env["API_KEY"]
$execution.id
当前执行 ID
$execution.id
$workflow.name
当前工作流名称
$workflow.name
$now
当前时间 (Luxon 对象)
$now.toISO()
$today
今天日期 (Luxon 对象)
$today.toFormat("YYYY-MM-DD")
常用方法:
方法
描述
示例
$jmespath(expression, data)
使用 JMESPath 查询 JSON 数据
$jmespath("users[*].email", $input.item.json)
$evaluateExpression(expression)
将字符串作为表达式求值
$evaluateExpression("$input.item.json.price * 2")
$ifEmpty(value, defaultValue)
如果值为空则返回默认值
$ifEmpty($input.item.json.description, "No description")
$if(condition, valueIfTrue, valueIfFalse)
根据条件返回不同值
$if($input.item.json.status == "success", "OK", "Error")
$max(number1, number2, ...)
返回多个数字中的最大值
$max(3, 5, 1)
$min(number1, number2, ...)
返回多个数字中的最小值
$min(3, 5, 1)
array.contains(value)
检查数组是否包含指定值
["apple", "banana"].contains("apple")
string.length()
获取字符串长度
"hello".length()
date.format(format)
将日期格式化为指定字符串
$now.format("YYYY-MM-DD")
注意:
  • 这只是一份常用变量和方法的速查表,n8n 提供了更多的变量和方法,你可以参考官方文档了解更多信息。
  • 表格中的示例仅供参考,你需要根据实际情况修改变量和表达式的值。
希望这份速查表能够帮助你更方便地使用 n8n 内建变量与方法,从而更高效地构建和维护你的工作流。
n8n如何接入国产大模型?基于 RSS 的阅读分流器
Loading...
目录