如何在 n8n Code 节点中高效编写 JavaScript 代码

解决在 n8n 工作流中面对复杂逻辑时,仅靠内置节点无法实现数据转换、聚合或高级计算的问题,提供一套标准的 JavaScript 编写规范和避坑指南。

为什么需要这个技能

虽然 n8n 提供了大量可视化节点,但在处理以下场景时,使用 Code 节点编写原生 JavaScript 会高效得多:

  • 复杂数据转换:需要对 API 返回的深层嵌套 JSON 进行重新映射或清洗。
  • 数据聚合:将多个输入项(Items)合并为一个统计结果(如计算总和、平均值)。
  • 高级过滤:使用正则表达式或复杂逻辑筛选数据。
  • 动态请求:在代码中使用 $helpers.httpRequest() 实现灵活的异步 API 调用。

适用场景

  • 在 Webhook 接收数据后,需要对 body 内容进行快速预处理。
  • 需要将多个节点的输出结果进行交叉比对并去重。
  • 针对每一条数据执行独立的验证逻辑,并根据结果决定后续走向。
  • 处理日期时间计算(利用内置的 Luxon 库)。

核心工作流

1. 选择执行模式

n8n 的 Code 节点有两种模式,选择错误会导致逻辑失效:

  • Run Once for All Items(推荐):代码仅执行一次。适用于聚合、排序、去重。通过 $input.all() 获取所有数据。
  • Run Once for Each Item:每条数据执行一次。适用于独立的单项转换。通过 $input.item 获取当前数据。

2. 标准数据访问与返回

必须遵循 n8n 的数据结构规范,否则后续节点无法接收数据:

  • 访问数据:使用 $input.all()$input.first()
  • 关键点:Webhook 的数据必须通过 .body 访问(例如 $json.body.name)。
  • 返回格式:必须返回一个由对象组成的数组,且每个对象包含 json 属性。
// 正确的返回示例
return [
  {
    json: {
      id: 123,
      status: 'success'
    }
  }
];

3. 常用内置工具

  • HTTP 请求:使用 await $helpers.httpRequest({ ... })
  • 日期处理:直接使用 DateTime (Luxon),如 DateTime.now().toISO()
  • JSON 查询:使用 $jmespath(data, 'query') 快速提取复杂路径数据。

下载和安装

下载 n8n-code-javascript 中文版 Skill ZIP

解压后将目录放入你的 AI 工具 skills 文件夹,重启工具后即可使用。具体路径参考内附的 USAGE.zh.md

你可能还需要

暂无推荐