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