Маршрут SvelteKit выдает ошибку 500 при перезагрузке

Я уже некоторое время работаю над проектом SvelteKit. Всегда возникала проблема: если я перезагружаю маршрут, отличный от домашней страницы, я получаю ошибку 500. Я новичок в веб-разработке.

Итак, я просматриваю все поисковые запросы, которые приходят мне в голову, например, «SvelteKit прерывается при перезагрузке». В конце концов я наткнулся на эту [ветку GitHub][1], которая наиболее близка к людям, выражающим подобную проблему, из всех, что я видел.

Я обнаружил, что перезагрузка не обязательно является виновником. Если я перейду на определенную страницу вручную, введя URL-адрес, я получу ту же ошибку. Мне также не удалось найти темы, обсуждающие это.

Логично, что это происходит на бумаге. Страницы не существуют, пока кто-то не перейдет к ним с помощью маршрутизатора. Маршрутизатор монтирует страницу, а функция onMount во всех связанных компонентах создает страницу на месте на стороне клиента. Я это понимаю. В настоящее время это приложение является чисто клиентским и использует клиентские объекты, такие как localStorage, поэтому такие серверные функции, как load, мне не помогли, поскольку они не могут получить доступ к localStorage.

Последней каплей для меня стало то, что я понял, что если я буду входить и выходить из одного и того же маршрута, некоторые данные будут сохраняться в фоновом режиме через объекты истории, которые медленно искажают поведение страницы.

Мой вопрос: как мне заставить SvelteKit перезагрузить эти страницы, не устраивая при этом истерик?

Что такое сообщение об ошибке?

aurelienrichard 01.05.2024 22:31

Я сам опубликовал ответ, так как работал над решением. Он еще не принят, потому что я не могу принять свой ответ уже 2 дня, но в основном он правильный. Я попытался выловить сообщение об ошибке, но точная ошибка была очень противоречивой. На ранних этапах разработки сообщение о смерти всегда было window is not defined, но мне удалось сузить проблемные компоненты и избежать ошибки или выдать ошибку с лучшим сообщением.

Pablo Ibarz 01.05.2024 22:41
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
2
89
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вот краткое изложение результатов для ясности:

Проблема: перезагрузка страницы приводит к поломке SvelteKit.

  1. Страница полагается на данные сервера.
  2. Пейдж полагается на данные клиента.
    • Добавьте if (browser) перед кодом, использующим данные из браузера. Это может включать window, localStorage и другие. Я не уверен, где найти полный список этих свойств, но localStorage — это свойство окна, поэтому вполне логично, что оба свойства пропадут одновременно.

При вводе здесь моего вопроса StackOverflow показал мне аналогичные ошибки:

Я не видел этих тем раньше, потому что они не появлялись в моих результатах поиска, только когда я набирал этот вопрос и вводил заголовок, чтобы получить рекомендации StackOverflow. Спасибо StackOverflow!

После выполнения большого количества вызовов if (browser) мне удалось правильно перезагрузить один из моих маршрутов. Проведение этого для каждого маршрута должно занять очень много времени. Но я думаю, это моя текущая директива. У него очень неуклюжая последовательность перезагрузки, которая на самом деле выглядит очень многообещающе для забывания любых данных, которые SvelteKit решил сохранить, хотя я еще не проверял это на предмет проблемы повреждения.

Проблема остается в том, что я понятия не имею, что происходит. Это не проблема моего проекта, и похоже, что утверждения if (browser) были правильным решением. Я все равно собираюсь опубликовать эту тему, потому что думаю, что она намного более понятна, чем существующие темы.

Остается вопрос, как SvelteKit понимает автоматическую перезагрузку страницы, когда он сталкивается с достаточным количеством операторов if. Круто, но странно.

Другие вопросы по теме