AEM webbplats visar "Oväntat fel" på grund av JS-användning av API-problem
Om AEM webbplats ibland kraschar med meddelandet"Oväntat fel" kan det bero på problem i JavaScript Use API-komponenter. Starta om poderna för att återställa tjänsten, ersätt sedan inaktuell kod med Sling Models och förbättra felhanteringen för att förhindra att den händer igen.
Beskrivning description
Miljö
Adobe Experience Manager as a Cloud Service (AEMaaCS) - Webbplatser
Problem/symtom
Den offentliga webbplatsen har ibland driftstopp, vilket ofta visar ett felmeddelande och misslyckas med att läsa in vissa sidor. Loggar pekar på problem med JavaScript Use API-instansiering och HTTP 500-fel.
Symtomen är bland annat:
- Oväntat fel. Vi försöker ta det online.-meddelande på berörda sidor.
- JavaScript Use API-fel som: Identifier linkDropdownLogic.js kan inte initieras korrekt av Use API.
- Sling-undantag på grund av ogiltiga referenser eller skriptlogik.
- Vissa sidor kan inte läsas in medan andra (som hemsidan) kan läsas in igen.
Orsak
Avbrottet orsakades av ett JavaScript-fel i en anpassad fil: Identifieraren ____.js kan inte instansieras korrekt av API:t.
- Koden använde ECMAScript-destrukturering:
for (const [ _, res] of items) - Syntaxen är inte kompatibel med Rhino-motorn som används av AEM Sightly.
- Felet uppstod när skriptet försökte bearbeta ofullständiga innehållsstrukturer under replikering.
Varför det bara hände på en ruta
Även om alla publiceringsfönster hade samma kod misslyckades bara ett av dem på grund av:
- Ofullständig innehållsreplikering - Poden var i ett tillfälligt tillstånd med delvis replikerat innehåll.
- Osäker hantering av iterator - JS-koden kunde inte hantera saknade eller ofullständiga datastrukturer.
- Resursöverstrålning - Felslingan förbrukade systemresurser, vilket medförde en krasch.
- Ingen automatisk återställning - Poden kunde inte återställas utan manuell omstart på grund av permanent resursöverbelastning.
Technical Insight
- Motorbegränsning: Rhino JS-motorn stöder inte destrukturering på Java-iteratorer.
- Kodbeteende: Kan fungera under normala förhållanden, men misslyckas under stress eller partiella data.
- Påverkan: En pod gick in i en felslinga, medan andra fortsatte att köras normalt.
Upplösning resolution
Så här löser du JavaScript Use API-problemet:
- Starta om alla publiceringsfönster för att tillfälligt stabilisera miljön. Detta rensar felen HTTP 500 och återställer webbplatsens tillgänglighet.
- Granska sedan JavaScript modellklasser som orsakar instansieringsfel. Ersätt borttagna JavaScript Use API-komponenter med Java-baserade Sling Models och se till att alla refererade klasser har rätt åtkomstmetoder.
- Uppdatera den problematiska koden så att du inte använder ECMAScript-destrukturering på Java-iteratorer. Använd i stället Java iterator-standardmönster. Lägg till null-kontroller och felhantering för att hantera ofullständiga innehållsstrukturer på ett säkert sätt.
- Lägg till try/catch-block i JavaScript Use API-skript för att förhindra fullständigt fel när innehåll saknas. Designa komponenter för smidig nedgradering och undvik kaskadfel.
- Granska komponentberoenden och överväg att använda cachelagrat reservinnehåll för viktiga element som navigering. Implementera kretsbrytare för komponenter som är beroende av externa tjänster.
Relaterad läsning
Funktioner som är inaktuella och har tagits bort | Adobe Experience Manager