由於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都有相同的程式碼,但只有一個失敗,原因如下:

  1. 不完整的內容復寫 — Pod處於暫時狀態,有部分復寫的內容。
  2. 不安全的迭代器處理 — JS程式碼無法處理遺失或不完整的資料結構。
  3. 資源耗盡 — 錯誤回圈耗用系統資源,導致當機。
  4. 無自動復原 — pod無法復原,因為持續的資源耗盡,必須手動重新啟動。

技術Insight

  • 引擎限制: Rhino JS引擎不支援在Java迭代器上解構。
  • 程式碼行為:可能正常運作,但在壓力或部分資料下失敗。
  • 影響: 一個Pod進入失敗回圈,而其他的Pod繼續正常執行。

解決方法 resolution

若要解決JavaScript Use API問題:

  1. 重新啟動所有發佈Pod以暫時穩定環境。 這會清除​ HTTP 500 ​錯誤並還原網站可用性。
  2. 接下來,檢閱JavaScript模型類別,此類別會造成具現化錯誤。 取代過時的JavaScript使用API元件搭配Java型Sling模型,並確保所有參照的類別都有適當的存取方法。
  3. 更新有問題的程式碼以避免在Java迭代器上使用ECMAScript解構。 請改用標準Java迭代器模式。 新增Null檢查和錯誤處理以安全地管理不完整的內容結構。
  4. 在您的JavaScript中新增try/catch區塊使用API指令碼來防止內容遺失時完成失敗。 設計元件以適當地降級並避免級聯失敗。
  5. 最後,檢閱元件相依性,並考慮對導覽等關鍵元素使用快取的遞補內容。 為依賴外部服務的元件實施斷路器。

相關閱讀

已棄用和已移除的功能 | Adobe Experience Manager

recommendation-more-help
3d58f420-19b5-47a0-a122-5c9dab55ec7f