n8n 踩坑日記,9個開發技巧,加速開發速度。(一)

n8n 踩坑日記,9個開發技巧,加速開發速度。(一)

雖然寫(一)但由衷希望不要有(二)

如果有(二)表示我又踩到更多坑

拆成多個 Workflow,供相同用途時重複使用

模組化是能不能組織龐大架構的必經之路,

把很多地方都能重複使用的功能,獨立出一個 Workflow,讓其他工作流可以使用。

出錯也知道是哪一塊出問題。減少找問題的時間。

Wait + Loop 限制 HTTP 節點使用速度

如果前一個 output 有很多 item,遇到 http 節點,會瞬間 n 個request 發出去。

通常目標 server 會做速率限制。如果一次太多請求,會給你 429 的速度太快的錯誤。節點就停了。

這時要使用 Loop 把 output 拆成多個,後面接 Wait 節點,停個幾秒(視情況而定),再單獨跑 http 回到 Loop。

Workflow 用 note 紀錄 input , output 長什麼樣子

約定好輸出,輸入長什麼樣子。

例如 A workflow 會去使用 B workflow,再把 B 給的 output 做下一件事。

如果清楚 input 要給長什麼樣的,會拿到什麼樣的 output。

這樣 A ,可以忽略 B 裡面怎麼運作的。就是相信 B 要正常運作,給 B 需要的 input,就會拿到需要的 output 來做下一件事。

減少邏輯上的複雜程度,也就減少精神消耗,將精力放在眼前的 input output 上。

在協同工作,或是除錯上都很有幫助。

個人建議,一個 workflow ,除非很清楚怎麼運作,架構清晰,不然不要超過十個節點。

進階

你也可以透過社群節點 https://www.npmjs.com/package/n8n-nodes-data-validation,來檢查 input, output 格式,

但你會需要先了解 json schema 的知識。未來有機會再寫一篇。

不需要 workflow 的 output,就把 Wait For Sub-Workflow 關掉

如果 call workflow,可以設後不理(設定值的設),那可以把 call workflow 的等待關掉。

提早結束這步,如果在迴圈裡使用,還可以並行處理。減少整個流程的時間。

這也是少數 n8n 能做並行處理的時刻。

Loop 不要重複使用,開新的 Workflow 單獨執行。

Loop 有時會遇到 bug:

  • 拿最後一個節點,已經回來的 output 的再送進迴圈裡跑,見鬼。
  • 沒進到迴圈裡,直接從 done 出來,見鬼。

目前遇到的狀況,都是在這 Loop 不只進去一次。像是 Loop 裡又有 Loop、多個 input 來源。

雖然不清楚 bug 怎麼來的,但是用 Workflow 把執行時的內部變數獨立切開,讓執行時,不要互相影響。

從上一層 workflow 去 call 子 workflow。

Merge 節點漏資料

merge 也是有 bug:

  • 某個 input 資料沒進來,就直接給出 output

直接刷新網頁,讓節點從頭跑,不被暫存在網頁的變數影響。

以及用 set mock 去放模擬資料。

D 鍵快捷,關閉節點

直接前一個 output pass 過去,如果下一個節點根本不看 input,是滿有用的。

常配合 set mock 使用。

圖片每次都重抓

圖片不能 set mock。如果圖片抓很慢。

先把圖片轉 base64, set mock 存起來,再把 base64 轉回圖片,並且暫停抓圖的節點。

開發會快很多。記得做完恢復原樣。

執行順序都是由上到下,由左至右

如果有什麼動作是要先做的,除了線,節點位置有很大的關係。

像是寫到資料庫,後面要讀取,或是哪個 Request 要先使用。

除了線性一步一步做,這也是方法。

但為了好理解,盡量減少這種用法。

工商時間

如果你有使用自動化的需要

歡迎透過 Facebook, IG, Threads 聯絡我:

Facebook: https://www.facebook.com/mason276752

IG, Threads: @mason276752

Read more

30歲心得

30歲心得

1. 不要介入別人的課題。避免別人負面情緒,影響到自己。 2. 累積專業,提高最低收入。也是向上層級的基本。 3. 覺察自己,調整自身態度、行為模式,成為更好的自己。 4. 揣測人性,保護自己同時創造共贏。 5. 練習不帶自己價值觀,聆聽別人說什麼,接受世界什麼人都有,可能別人的方式更好。 6. 練習接受現況,並持續思考下一步。 一切痛苦來源都是不接受。 7. 不帶目的,廣結善緣。持續做,不知道種子什麼時候會發芽,但回報是巨大的,會遠遠超越工作多年,足以改變人生。越早開始越好,才有足夠時間等到機會到來。 8. 學習理財, 10萬, 300萬, 1000萬,...,只用自己階段適合的理財方式。 * < 10 萬,拼命存錢,存緊急預備金,買足人身保險。避開無政府監管投資。 * <300

By Mason Tang
n8n怎麼做防抖debounce?

n8n怎麼做防抖debounce?

防抖 debounce, 是程式設計重要的概念之一。 用意是短時間有多個訊息進來,只處理一次。 處理哪一次呢?只處理最後一次。 就比如,有人點擊習慣什麼都按兩下, 你就要每次都處理兩次嗎? 又比如,你做 Line 機器人。講一句回一句。 那如果使用者一次傳好幾句呢? 像是打錯字,習慣的修正,再送一次。或是使用者分段講完。 你要跑一次一起處理,還是跑多次? 現在你知道使用情境了,那在 n8n 怎麼做呢? 就比如 Line 訊息好了,你其實可以把Webhook 來的訊息存到 db 裡。 另外做一個 短時間(ex:10s) 就跑一次的 schedule, 去檢查新訊息,並休息一下(ex:5s)。再檢查新訊息。 如果兩次新訊息,筆數都一樣,就表示沒有新訊息進來了。就可以開始處理。 最後再把新訊息標記成舊訊息。 讓

By Mason Tang
n8n 主從架構,解放n8n效能,進行更多任務

n8n 主從架構,解放n8n效能,進行更多任務

n8n 有提供主從架構,讓多個 n8n 程式一起為你工作。 他們會懂得調派任務。 比如你把任務給主管,主管收到任務,就會把任務分配給底下的員工。而你身為老闆的你,只要面對主管。 這主管就是 Master, 員工就是 Slave (奴隸,真貼切) 透過多個程式,讓效率大幅提高。同時間能進行的任務更多。 那實際怎麼做呢? 設定 N8N_ENCRYPTION_KEY 這是用來加密資料庫資料的密鑰,在原本單一 n8n ,不是那麼需要,啟動時就會幫你建立。 會存在 .n8n/config 中,長得就像這樣 { "encryptionKey": "cjw5GKuWL6eoqaC0MOnHdBNWOfxAzXsn" } 今天你要跑多個 n8n ,每個 n8n 都要讀資料庫,那些加密的資料就需要同樣的 encryptionKey 才能讀取。 所以需要直接在環境變數中直接設定

By Mason Tang
n8n 做個計數器,保存變數到下一次執行

n8n 做個計數器,保存變數到下一次執行

n8n 可能有人會好奇,怎麼做計數器,例如一天只能使用 200次。 但是 Node 裡,似乎沒看到這功能。 但其實這功能就藏在 Code 裡 獲取靜態資料 其實這功能就藏在 $getWorkflowStaticData 使用這個函數,拿到的物件,其實是能持久化的,即使 n8n 關掉再開,資料也還在。 整個 n8n 共用這變數 使用 $getWorkflowStaticData('global') 這邊可以看到,這個 count 已經被使用 9 次了,並且在其他 Code 也可以獲得這個 count 單一 Node 使用,不能跨 Node 使用 使用 $getWorkflowStaticData('node&

By Mason Tang