如何在 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。
你可能还需要
暂无推荐