Tomado directamente de los documentos de sveltekit. Al devolver un 404 en la carga de la página, se producirá una excepción no detectada que rompe la página:
<script context="module"> /** @type {import('./__types/[...path]').Load} */ export function load({ params }) { return { status: 404, error: new Error(`Not found: /marx-brothers/`) }; } </script>Lo anterior provoca un error no detectado que aparece en la consola:
Esto hará que cualquier otro JS no funcione, como eventos on:click, etc.
Los documentos no dan más detalles sobre el asunto: https://kit.svelte.dev/docs/layouts#error-pages
¿Alguien puede explicar por qué se lanza una excepción no detectada al devolver un estado 404 para una página en la carga de la página? ¿Y cuál es la mejor manera de resolver el problema? Gracias.
Editar: devuelvo el 404 en una página __layout.svelte, que es la página de diseño predeterminada de la que heredan otras páginas. ¿Hay algún problema con hacerlo de esa manera?
actualizar:
Pude reproducir la excepción no detectada usando la aplicación de demostración y agregando el fragmento de código a __layout.svelte. A pesar de la excepción, la página se mostró bien. No probé si JS estaba roto; la mayoría de las páginas 404 son simples. (Ver nueva captura de pantalla).
Confirmé el cambio error: new Error(...) a una cadena simple aún resultó en una excepción no detectada.
Es muy extraño devolver una respuesta 404 de un __layout.svelte. Los diseños están destinados a ser utilizados para representar elementos comunes de la interfaz de usuario (y quizás una lógica común como proteger páginas detrás de la autenticación).
La verificación de la lógica de estado 404 y la lógica de respuesta deben colocarse en el archivo index.svelte principal. Si no existe una ruta, SvelteKit generará automáticamente la respuesta 404.
Captura de pantalla al modificar la aplicación de demostración:
No pude reproducir la excepción no detectada. SvelteKit representó una página 404, como se esperaba:
Mi proceso (original) para reproducir:
npm init svelte load404 (Elegir proyecto de esqueleto, opciones predeterminadas)cd load404yarn <script context="module"> /** @type {import('./__types/[...path]').Load} */ export function load({ params }) { return { status: 404, error: new Error(`Not found: /marx-brothers/`) }; } </script>yarn dev --open