目錄

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日