目录

n8n Code 节点教程:使用 JavaScript 和 Python 处理数据

当表达式和现成节点无法满足你的需求时,Code 节点让你直接编写 JavaScript(或 Python)。

两种运行模式

模式运行次数读取数据适用场景
Run Once for All Items整个节点只运行一次$input.all()统计、排序、合并、生成多条新数据
Run Once for Each Item每个 item 运行一次$input.item / $json逐条转换数据

返回格式

Code 节点必须返回 items 数组,每个元素都是 { json: {...} }:

return [
  { json: { name: "小明", score: 90 } },
  { json: { name: "小华", score: 85 } },
];

在 Run Once for Each Item 模式中,返回一个对象即可:

return { json: { ...$json, total: $json.price * $json.qty } };

(新版 n8n 也接受直接返回普通对象,并会自动将其包装成 { json: ... },但明确写出来更不容易出错。)

示例:计算并添加字段(逐条运行)

const price = Number($json.price);
const qty = Number($json.qty);

return {
  json: {
    ...$json,
    subtotal: price * qty,
    shipping: price * qty >= 1000 ? 0 : 60,
  },
};

示例:统计(全部只运行一次)

const items = $input.all();

const byRegion = {};
for (const item of items) {
  const { region, amount } = item.json;
  byRegion[region] = (byRegion[region] ?? 0) + Number(amount);
}

return Object.entries(byRegion)
  .sort((a, b) => b[1] - a[1])
  .map(([region, total]) => ({ json: { region, total } }));

输入 100 条订单,输出每个地区一条汇总数据。

示例:生成多条数据

// 生成未来 7 天的日期
const days = [];
for (let i = 0; i < 7; i++) {
  days.push({ json: { date: $now.plus({ days: i }).toFormat("yyyy-MM-dd") } });
}
return days;

示例:整理 API 返回的复杂数据

const data = $input.first().json;

return data.results
  .filter((r) => r.status === "active")
  .map((r) => ({
    json: {
      id: r.id,
      name: r.profile?.display_name ?? r.username,
      email: r.contact?.email ?? null,
      tags: (r.tags ?? []).map((t) => t.label).join(", "),
    },
  }));

读取其他节点的数据

与表达式相同:

const settings = $("获取设置").first().json;
const orders = $("订单").all();

调试

console.log($json);

输出会显示在浏览器的开发者工具 Console 中(手动测试时)。

使用外部 npm 包

自托管版本可以通过环境变量允许 Code 节点使用内置模块和外部包:

NODE_FUNCTION_ALLOW_BUILTIN=crypto
NODE_FUNCTION_ALLOW_EXTERNAL=lodash,dayjs

外部包必须安装在运行 Code 节点的环境中(使用 Docker 时通常需要自定义镜像)。n8n 2.x 的 Code 节点在**任务运行器(task runner)**中运行,相关配置请参阅官方文档中关于 task runners 的说明。

n8n 2.x 的重要变更

  • Code 节点默认无法读取环境变量($env),以避免机密泄露。
  • Code 节点不再支持 $evaluateExpression()。
  • Python:旧版通过 Pyodide(浏览器端 Python)运行的方式已移除。n8n 2.x 的 Python Code 节点需要使用以“外部模式”运行的任务运行器(官方提供 n8nio/runners 镜像),而且语法与旧版不同。

Python 示例(需要已配置 Python 任务运行器)

# Run Once for All Items
results = []
for item in _items:
    data = item["json"]
    results.append({"json": {"name": data["name"].strip(), "length": len(data["name"])}})
return results

新的 Python 运行方式使用 _items(全部项目)或 _item(逐条模式),并通过字典的方括号语法读取字段,不支持 _input 和点号语法。如果你的环境没有配置 Python 任务运行器,建议使用 JavaScript。

什么时候不该使用 Code 节点

  • 简单取值、格式化 → 使用表达式
  • 拆分、合并、筛选、排序 → 使用 Split Out、Aggregate、Filter、Sort
  • 调用 API → 使用 HTTP Request

Code 节点越少,工作流就越容易让其他人看懂和维护。

更新于 2026年10月12日