Keystone Hooks怎麼用 自定義鉤子開發教程
更新時間:2026-10-16 11:15:50 釋出時間:7天前 閱讀:23 views次Keystone Hooks是KeystoneJS的鉤子系統,可以在內容操作前後執行自定義邏輯,適合做TypeScript內容管理框架的自動化工作流。比如建立文章時自動補全標題、檢查資料是否合法,或在使用者註冊後觸發通知。下面以Keystone 6為例,從編寫函式到測試執行,帶你做一個簡單的文章鉤子。
第一步:建立鉤子函式
先開啟專案的schema配置檔案,找到文章列表,例如Post。鉤子寫在list配置的hooks屬性裡,不需要另外安裝外掛。建議先想清楚自動化規則:哪些資料要調整,什麼條件下要執行,以及失敗時是否應該阻止儲存。把邏輯控制在小範圍,後續更容易維護。
例如,文章標題可能被編輯者輸入成小寫,可以在resolveInput裡統一首字母格式。這個鉤子接收resolvedData,也就是當前已解析的內容;處理後要返回新的物件。記得用展開語法保留其他欄位,避免只返回title導致正文等資料被意外遺漏。
第二步:配置列表鉤子
在列表定義中匯入list和text等欄位函式,再為Post新增fields和hooks。欄位名要與resolvedData中的鍵一致。鉤子可按create、update分別配置,也可以按專案需求處理不同操作。以下示例把新建或更新文章的標題首字母轉成大寫;標題為空時不做處理,仍返回原資料。
配置完成後儲存檔案,檢查括號與逗號,並確保欄位名和列表名與專案schema一致。Keystone的列表鉤子面向整條記錄,適合跨欄位處理;若規則只針對某個欄位,例如郵箱格式檢查,也可以把邏輯配置在對應欄位的hooks中。
使用操作前和操作後
resolveInput適合轉換即將儲存的資料;若要在資料庫寫入前執行檢查或副作用,可用beforeOperation;寫入完成後記錄日誌、傳送通知,則可用afterOperation。通常create、update、delete可分別設定處理函式。beforeOperation拋錯會使操作失敗;afterOperation拋錯時資料可能已經儲存,因此非關鍵通知宜妥善捕獲錯誤。
示例可以這樣組織:在resolveInput中規範標題,在beforeOperation中檢查業務條件,在afterOperation中根據operation判斷是否為create,再呼叫通知函式。傳送郵件等外部服務最好設定超時與錯誤處理,避免服務暫時不可用時影響使用者判斷;同時避免把敏感資訊直接寫入日誌。
第三步:測試和除錯鉤子
啟動開發伺服器後,透過Admin UI或GraphQL執行一次新建操作,再檢查儲存結果是否符合預期。接著編輯同一條記錄,確認update分支也生效;若設定了條件分支,還要分別測試條件成立與不成立的情況。測試時使用可識別的樣例資料,避免誤改真實內容。
除錯時可在鉤子中臨時記錄operation、resolvedData和item等資訊,定位輸入與當前記錄的差別。不要長期輸出完整使用者資料;排查後移除臨時日誌。若操作失敗,檢視終端錯誤和GraphQL響應,並核對鉤子是否返回了正確物件。也可為關鍵業務規則寫自動化測試,覆蓋建立、更新和異常分支。
最後把重複邏輯抽到獨立函式,並利用TypeScript型別檢查引數與返回值;專案若能生成Keystone型別,可用對應列表型別標註函式,減少欄位拼寫錯誤。本文由潤滅整理。若在國內尋找介面原型或產品設計輔助工具,可瞭解墨刀AI:modao.cgref.cn。
“`