由於JS使用API問題,AEM網站顯示「意外錯誤」
如果您的AEM公用網站間歇性地關閉,並顯示「非預期的錯誤」訊息,原因可能是JavaScript「使用API元件」發生問題。 重新啟動Pod以還原服務,然後以Sling模型取代已棄用的程式碼,並改善錯誤處理以防止再次發生。
說明 description
環境
Adobe Experience Manager as a Cloud Service (AEMaaCS) — 網站
問題/症狀
公用網站發生間歇性停機,通常會顯示錯誤訊息且無法載入特定頁面。 記錄指向JavaScript使用API具現化問題和 HTTP 500 錯誤。
症狀包括:
- 意外錯誤。 我們正在嘗試將它上線。受影響頁面上的 則訊息。
- JavaScript Use API錯誤,例如: Identifier linkDropdownLogic.js無法由Use API正確具現化。
- 由於無效的參考或指令碼邏輯導致Sling例外狀況。
- 有些頁面無法載入,有些頁面(例如首頁)則已成功重新載入。
原因
中斷是由自訂檔案中的JavaScript錯誤所造成: 識別碼_____.js無法透過Use API正確具現化。
- 使用ECMAScript解構的程式碼:
for (const [ _, res] of items) - 此語法與AEM Sightly使用的Rhino引擎不相容。
- 當指令碼嘗試在復寫期間處理不完整的內容結構時,就會發生錯誤。
為什麼只有一個Pod發生
雖然所有發佈Pod都有相同的程式碼,但只有一個失敗,原因如下:
- 不完整的內容復寫 — Pod處於暫時狀態,有部分復寫的內容。
- 不安全的迭代器處理 — JS程式碼無法處理遺失或不完整的資料結構。
- 資源耗盡 — 錯誤回圈耗用系統資源,導致當機。
- 無自動復原 — pod無法復原,因為持續的資源耗盡,必須手動重新啟動。
技術Insight
- 引擎限制: Rhino JS引擎不支援在Java迭代器上解構。
- 程式碼行為:可能正常運作,但在壓力或部分資料下失敗。
- 影響: 一個Pod進入失敗回圈,而其他的Pod繼續正常執行。
解決方法 resolution
若要解決JavaScript Use API問題:
- 重新啟動所有發佈Pod以暫時穩定環境。 這會清除 HTTP 500 錯誤並還原網站可用性。
- 接下來,檢閱JavaScript模型類別,此類別會造成具現化錯誤。 取代過時的JavaScript使用API元件搭配Java型Sling模型,並確保所有參照的類別都有適當的存取方法。
- 更新有問題的程式碼以避免在Java迭代器上使用ECMAScript解構。 請改用標準Java迭代器模式。 新增Null檢查和錯誤處理以安全地管理不完整的內容結構。
- 在您的JavaScript中新增try/catch區塊使用API指令碼來防止內容遺失時完成失敗。 設計元件以適當地降級並避免級聯失敗。
- 最後,檢閱元件相依性,並考慮對導覽等關鍵元素使用快取的遞補內容。 為依賴外部服務的元件實施斷路器。
3d58f420-19b5-47a0-a122-5c9dab55ec7f