n8n Code 節點:JavaScript 資料轉換
用途
在 n8n Code 節點寫出符合規範的 JavaScript,正確處理多筆資料並回傳合法格式,避免常見的格式錯誤導致下游節點斷掉。
何時用
- 適合:Set 節點或 Function 節點不夠用、需要自訂篩選 / 聚合 / 合併邏輯時;要從 Webhook payload 取多層欄位並重新塑形時。
- 不要用:只是選架構或設計節點清單,請用「架構模式選擇器」;如果邏輯很簡單(只是改一個欄位名稱),用 Set 節點就夠,不需要 Code 節點增加維護成本。
Prompt
text
我要在 n8n Code 節點寫 JavaScript 資料轉換,請幫我產出完整可貼入的程式碼。
輸入資料(JSON 範例):
{{輸入資料JSON——貼一筆真實資料讓 AI 知道欄位結構}}
要做的轉換:
{{要做的轉換——描述篩選條件、聚合方式、欄位對應等}}
期望輸出(JSON 範例或描述):
{{期望輸出}}
要求:
1. 回傳格式必須是 [{json: {...}}] 陣列(n8n Code 節點規範)
2. Webhook 來的資料要從 $json.body 取,不是 $json
3. 使用 "Run Once for All Items" 模式(items 傳入,return 陣列)
4. 對所有可能 null/undefined 的欄位加防禦性檢查
5. 整個邏輯包在 try-catch,catch 回傳 [{json: {error: e.message, input: items}}]
6. 不要用 require()(n8n 沙盒不支援)
輸出:完整 JS 程式碼 + 3 行說明每個主要步驟在做什麼。範例 / 變體
- 填好變數:輸入貼一筆 Webhook payload
{"body": {"orders": [{"id": "001", "amount": 500}]}}},轉換描述「篩選 amount > 100 的訂單,回傳 id + amount + 稅額(amount*0.05)」,輸出[{json: {id, amount, tax}}]。 - 變體(聚合版):多筆 items 進來、要聚合成一筆(如加總金額),在需求描述加「多筆 items 聚合成一筆輸出」,AI 會用 items.reduce() 寫法。
- 變體(含 console.log 除錯版):在要求中加「每個主要步驟加 console.log,方便在 n8n 執行日誌中追蹤」,開發階段用。
🎯 範例輸出(實測)
在 Claude.ai 跑這句、把
{{變數}}填成「輸入:{"body":{"orders":[{"id":"001","amount":500},{"id":"002","amount":80}]}};轉換:篩選 amount > 100 的訂單,回傳 id + amount + 稅額(amount*0.05);輸出:[{json:{id,amount,tax}}]」的結果:
點開看 AI 實際輸出
text
// n8n Code Node — Run Once for All Items
// 步驟說明:
// 1. 從 Webhook body 取 orders 陣列(防禦性取值)
// 2. 篩選 amount > 100 的訂單,計算稅額
// 3. 回傳 n8n 規範的 [{json: {...}}] 格式
try {
// Step 1: 取 Webhook body(注意是 $json.body,不是 $json)
const orders = items[0]?.json?.body?.orders;
if (!orders || !Array.isArray(orders)) {
return [{ json: { error: "orders 欄位不存在或非陣列", input: items } }];
}
// Step 2: 篩選 + 計算
const filtered = orders
.filter(order => order?.amount != null && order.amount > 100)
.map(order => ({
id: order.id ?? null,
amount: order.amount,
tax: Math.round(order.amount * 0.05 * 100) / 100
}));
// Step 3: 回傳 n8n 格式(每筆包 {json: ...})
return filtered.map(item => ({ json: item }));
} catch (e) {
return [{ json: { error: e.message, input: items } }];
}輸出結果(測試資料):
text
[
{ "json": { "id": "001", "amount": 500, "tax": 25 } }
]
// 訂單 002(amount:80)被篩掉,訂單 001 通過,稅額 = 500 * 0.05 = 25💡 實測心得:把輸入 JSON 的真實結構貼給 AI 是這個 prompt 最關鍵的步驟——貼假資料會讓 AI 猜欄位名,實際跑起來大機率取到 undefined;先在 n8n 裡用 Test Workflow 執行一次,把真實 payload 複製出來再餵給 Claude,一次到位。
延伸
簡單來說,n8n Code 節點最常踩的三個坑:回傳格式少了外層 {json: ...} 包裝、從 Webhook 取資料少了 .body、沒做 null 檢查讓下游節點炸掉。這個 prompt 的六條要求就是為了把這三個坑封住。
如果你的 JS 寫好後行為還是不對,用「n8n 工作流程除錯診斷」提示語做系統性排查。