由于JS使用API问题,AEM站点显示“意外错误”

如果您的AEM公共站点间歇性关闭并显示“意外错误”消息,则可能是由于JavaScript使用API组件中的问题导致的。 重新启动pod以恢复服务,然后将已弃用的代码替换为Sling模型,并改进错误处理以防止再次发生错误。

描述 description

环境

Adobe Experience Manager as a Cloud Service (AEMaaCS) — 站点

问题/症状

公共网站遇到间歇性停机,通常显示错误消息并且无法加载某些页面。 日志指向JavaScript使用API实例化问题和​ HTTP 500 ​错误。

症状包括:

  • 意外错误。 我们正在尝试使其上线。受影响页面上的 ​消息。
  • JavaScript使用API错误,如: 标识符linkDropdownLogic.js无法通过Use API正确实例化。
  • 由于无效引用或脚本逻辑导致Sling异常。
  • 某些页面加载失败,而其他页面(如主页)重新加载成功。

原因

中断是由自定义文件中的JavaScript错误导致的: 标识符_____.js无法通过Use API正确实例化

  • 代码使用了ECMAScript解构: for (const [ _, res] of items)
  • 此语法与AEM Sightly使用的Rhino引擎不兼容。
  • 脚本在复制期间尝试处理不完整的内容结构时出错。

为什么它只发生在一个面板上

尽管所有发布pod都具有相同的代码,但只有一个失败,原因是:

  1. 内容复制不完整 — 面板处于包含部分复制内容的临时状态。
  2. 不安全的迭代器处理 — JS代码无法处理缺少或不完整的数据结构。
  3. 资源耗尽 — 错误循环占用了系统资源,导致崩溃。
  4. 无自动恢复 — 由于永久资源耗尽,在没有手动重新启动的情况下,面板无法恢复。

技术Insight

  • 引擎限制: Rhino JS引擎不支持对Java迭代器进行破坏。
  • 代码行为:可以在正常条件下工作,但在压力或部分数据下失败。
  • 影响: 一个Pod进入故障循环,而其他设备继续正常运行。

解决方法 resolution

要解决JavaScript使用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