目录
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日