使用代码节点#
使用代码节点(Code node)编写自定义的 JavaScript 或 Python 代码,并在工作流中作为一步执行。 在 n8n 中进行编码 本页面提供有关代码节点的使用信息。如需更多关于在 n8n 中编码的指导,请参考 代码 章节。其中包括:
- 内置方法和变量 的参考文档
- 关于 处理日期 和 查询 JSON 的指南
- 越来越多的示例集合,详见 Cookbook
示例与模板 如需使用示例和模板帮助您快速上手,请访问 n8n 的 代码集成 页面。 Function 和 Function Item 节点 从版本 0.198.0 开始,代码节点取代了原有的 Function 节点和 Function Item 节点。如果您使用的是较旧版本的 n8n,仍可查看 Function 节点文档 和 Function Item 节点文档。
使用方法#
如何使用代码节点。
选择模式#
有两种模式可供选择:
- 对所有项目运行一次(Run Once for All Items):这是默认选项。当您的工作流运行时,无论输入多少个项目,代码节点中的代码仅执行一次。
- 对每个项目各运行一次(Run Once for Each Item):如果希望代码对每一个输入项目都运行一次,请选择此模式。
JavaScript#
代码节点支持 Node.js。
支持的 JavaScript 功能#
代码节点支持以下功能:
- Promises:您可以返回一个 Promise 对象,而不是直接返回 items,该 Promise 将以相应结果 resolve。
- 使用
console.log向浏览器控制台输出内容。这对于调试和排查工作流问题非常有用。
外部库#
如果您自行托管(self-host)n8n,可以在代码节点中导入并使用内置及外部的 npm 模块。要了解如何启用外部模块,请参考 在代码节点中启用模块 指南。 如果您使用的是 n8n Cloud,则无法导入外部 npm 模块。不过 n8n 提供了两个可用的模块:
- Node.js 的 crypto 模块
- moment npm 包
内置方法和变量#
n8n 提供了用于处理数据和访问 n8n 数据的内置方法和变量。更多信息请参考 内置方法和变量。
使用内置方法和变量的语法为 $variableName 或 $methodName()。在代码节点(Code node)或表达式编辑器中输入 $,即可查看建议的方法和变量列表。
键盘快捷键#
代码节点的编辑环境支持一系列节省时间且实用的键盘快捷键,涵盖从自动补全、代码折叠到多光标操作等功能。查看完整的 键盘快捷键列表。
Python (Pyodide - 已弃用)#
Pyodide 是一个已弃用的功能。未来的 n8n 版本将不再支持此功能。
n8n 自 1.0 版本起引入了对 Python 的支持。该功能不包含原生的 Python 可执行文件,而是通过 Pyodide 提供支持,Pyodide 是 CPython 到 WebAssembly 的移植版本。这限制了可用的 Python 包仅限于 Pyodide 支持的包列表 中的内容。n8n 会在你首次使用某个包时自动下载。
比 JavaScript 更慢 由于需要额外的编译步骤,代码节点处理 Python 的速度比 JavaScript 慢。
内置方法和变量#
n8n 提供了用于处理数据和访问 n8n 数据的内置方法和变量。更多信息请参考 内置方法和变量。
使用内置方法和变量的语法为 _variableName 或 _methodName()。在代码节点中输入 _,即可查看建议的方法和变量列表。
键盘快捷键#
代码节点的编辑环境支持一系列节省时间且实用的键盘快捷键,涵盖从自动补全、代码折叠到多光标操作等功能。查看完整的 键盘快捷键列表。
文件系统与 HTTP 请求#
你无法直接访问文件系统或发起 HTTP 请求。请改用以下节点:
- 从磁盘读取/写入文件 (Read/Write File From Disk)
- HTTP 请求 (HTTP Request)
Python(原生 - 测试版)#
n8n 从版本 1.111.0 开始,通过任务运行器(task runners,测试版)引入了对原生 Python 的支持。 与 Pyodide 相比的主要区别包括:
- 原生 Python 仅在“全部项”模式下支持
_items,在“逐项”模式下支持_item。不支持其他 n8n 内置方法和变量。 - 原生 Python 支持从标准库以及第三方导入原生 Python 模块,前提是
n8nio/runners镜像中包含这些模块,并且显式地将其加入白名单(allowlist)。更多详情请参见 为任务运行器添加额外依赖项。 - 原生 Python 默认禁用不安全的内置功能。更多详情请参见 任务运行器环境变量。
- 与 Pyodide 不同(Pyodide 支持点号访问语法,例如
item.json.myNewField),原生 Python 仅支持方括号访问语法,例如item["json"]["my_new_field"]。此外还可能存在其他细微语法差异,某些在 Pyodide 中合法的结构在原生 Python 中并不被允许。
请注意,升级到原生 Python 属于破坏性变更(breaking change),因此您可能需要调整现有的 Python 脚本以适配原生 Python 运行器。 该功能目前处于测试阶段(beta),后续可能会发生变化。待其趋于稳定后,n8n 将在 2025 年逐步向 n8n Cloud 用户推出此功能。自托管用户可尝试使用并提供反馈。
在 n8n 中编写代码#
在 n8n 中有两个地方可以使用代码:代码节点(Code node) 和 表达式编辑器(expressions editor)。无论使用哪个区域,都需要了解一些关键概念,以及一些内置的方法和变量,以帮助完成常见任务。
关键概念#
使用代码节点时,您需要理解以下概念:
- 数据结构:了解传入代码节点的数据格式,以及节点输出数据的要求。
- 项目关联(Item linking):了解数据项的工作机制,以及如何将当前项与前序节点中的项进行关联。当输入项与输出项数量不一致时,您需要在代码中手动处理项目关联。
内置方法和变量#
n8n 提供了一些内置方法和变量,用于支持以下功能:
- 访问特定项目的数据
- 访问有关工作流、执行过程及 n8n 环境的信息
- 提供便于处理数据和时间的便捷变量
请参考 内置方法和变量 了解更多信息。
在代码节点中使用 AI
功能可用性 代码节点中的 AI 辅助功能仅对 n8n Cloud 用户可用,在自托管(self-hosted)的 n8n 中不可用。 AI 生成的代码将覆盖现有代码 如果您已在 代码(Code) 选项卡中编写了部分代码,AI 生成的代码将会覆盖原有内容。n8n 建议将 AI 作为创建初始代码的起点,之后根据需要进行修改。 在代码节点中使用 ChatGPT 生成代码的步骤如下:
- 在代码节点中,将 语言(Language) 设置为 JavaScript。
- 选择 询问 AI(Ask AI) 选项卡。
- 输入您的查询请求。
- 点击 生成代码(Generate Code)。n8n 会将您的请求发送给 ChatGPT,并将生成的结果显示在 代码(Code) 选项卡中。
与文档互动 本页面是否对你有帮助?!赞有帮助 !踩没有帮助 感谢你的反馈! 提交 上一页 表达式 下一页 AI 编程 由 Material for MkDocs Insiders 提供支持