SuperAPI AI 工具集

n8n-code-javascript

编程与开发

查看项目

更新于 10-15 11:42

技能介绍

用途

n8n-code-javascript 是一份针对 n8n Code 节点的 JavaScript 编写指南,用于指导用户在 n8n 工作流的 Code 节点中编写 JavaScript 代码。它适合需要复杂数据转换、自定义计算、业务逻辑、递归操作、复杂 API 响应解析、多步条件判断以及跨条目数据聚合的场景。

主要能力

执行模式选择

Code 节点提供两种执行模式:

  • Run Once for All Items(推荐,默认):代码无论输入条目数量多少都只执行一次,通过 $input.all() 或 items 数组访问数据。适合聚合、过滤、批处理、转换、需要全部数据的 API 调用,多条目时性能更快。
  • Run Once for Each Item:代码对每个输入条目分别执行,通过 $input.item 或 $item 访问数据。适合条目级独立逻辑、独立操作、逐条校验,大数据集时性能较慢。

选择捷径:需要查看多个条目时用 All Items 模式;每个条目完全独立时用 Each Item 模式;不确定时用 All Items 模式(可在内部自行循环)。

数据访问模式

  • $input.all():最常用,处理数组、批量操作、聚合。
  • $input.first():处理单个对象、API 响应、先进先出。
  • $input.item:仅在 Each Item 模式下使用。
  • $node["节点名"].json:引用工作流中特定节点的输出。

Webhook 数据结构

最常见的错误是直接访问 Webhook 数据。Webhook 节点会把所有请求数据包裹在 body 属性下,因此应使用 $json.body.name 而非 $json.name,或用 $input.first().json.body 访问。

返回格式要求

必须始终返回带 json 属性的对象数组,例如 return [{json: {...}}]。单个结果、多个结果、转换后的数组、空结果 return [] 均遵循此格式。错误格式包括:不带数组包裹的对象、不带 json 包裹的数组、纯字符串、未映射的原始数据、结构不完整(如 {data: value})。格式错误会导致工作流执行失败。

内置函数与辅助工具

  • $helpers.httpRequest():在代码中发起 HTTP 请求,支持 method、url、headers 等配置。
  • DateTime(Luxon):日期时间操作,如 DateTime.now()、toFormat()、toISO()、plus()、minus()。
  • $jmespath():查询 JSON 结构,如过滤数组 users[?age >= \18`]、提取字段 users[*].name`。

常见模式

包括多源数据聚合、正则过滤、数据转换与增强、Top N 过滤与排序、聚合与报告等。

使用方式

在 n8n 工作流中添加 Code 节点,选择执行模式与语言(JavaScript 或 Python),在代码编辑区编写逻辑。注意:Code 节点直接使用 JavaScript,不使用 n8n 的 {{ }} 表达式语法,应使用 JavaScript 模板字符串 ${value}。

适用场景

适合需要复杂逻辑、需串联多个简单节点的场景。简单字段映射建议用 Set 节点,基础过滤用 Filter 节点,简单条件用 IF 或 Switch 节点,仅需 HTTP 请求用 HTTP Request 节点。

限制与注意事项

常见错误包括:代码为空或缺少 return、在代码中使用 n8n 表达式语法、返回包装错误、缺少空值检查、Webhook body 嵌套访问错误。最佳实践包括:始终校验输入数据、使用 try-catch 处理错误、优先使用数组方法而非循环、先过滤后处理、使用描述性变量名、用 console.log() 调试。部署前应核对清单:代码非空、存在 return 语句、返回格式正确、数据访问正确、无 n8n 表达式、有错误处理、Webhook 数据经 .body 访问、模式选择正确、性能优化、所有代码路径返回一致结构。

相关文档链接:Code Node Guide https://docs.n8n.io/code/code-node/ ;Built-in Methods https://docs.n8n.io/code-examples/methods-variables-reference/ ;Luxon Documentation https://moment.github.io/luxon/ 。