Отслеживание ошибок в SvelteKit требует понимания двух уровней: клиентского и серверного. Ошибки могут возникать как в логике компонентов, так и при взаимодействии с API или серверными функциями.
В SvelteKit каждый компонент может выбрасывать ошибки через
стандартные механизмы JavaScript (throw new Error()), но
библиотека предоставляет расширенные возможности для обработки
ошибок:
onError хук Позволяет перехватывать
ошибки на уровне компонента. Его можно использовать для логирования или
для вывода пользовательского интерфейса при ошибке.<script>
import { onError } from 'svelte';
onError((error) => {
console.error('Ошибка компонента:', error.message);
});
</script>
fetch или асинхронными функциями. В
SvelteKit можно использовать блоки try/catch внутри
load функций для маршрутов.export async function load({ fetch }) {
try {
const res = await fetch('/api/data');
if (!res.ok) throw new Error('Ошибка загрузки данных');
const data = await res.json();
return { props: { data } };
} catch (err) {
return { error: err.message };
}
}
На серверной стороне SvelteKit ошибки могут возникать в endpoints
(+server.js) или в hooks (+layout.server.js).
Здесь важны два аспекта: логирование и
правильная генерация ответов клиенту.
error функции SvelteKit
Для передачи ошибок клиенту рекомендуется функция
error(status, message). Она автоматически создаёт объект
ошибки с нужным HTTP-статусом.import { error } from '@sveltejs/kit';
export async function GET() {
const data = await fetchSomeData();
if (!data) {
throw error(404, 'Данные не найдены');
}
return new Response(JSON.stringify(data));
}
hooks.server.js можно перехватывать ошибки всех запросов,
чтобы централизованно логировать их.export async function handle({ event, resolve }) {
try {
return await resolve(event);
} catch (err) {
console.error('Глобальная ошибка сервера:', err);
return new Response('Внутренняя ошибка сервера', { status: 500 });
}
}
Для продакшн-приложений важно подключение к сервисам отслеживания ошибок, таким как Sentry, Bugsnag, Rollbar:
npm install @sentry/sveltekit
Импорт и инициализация в hooks.server.js и
hooks.client.js:
import * as Sentry from '@sentry/sveltekit';
Sentry.init({
dsn: 'YOUR_DSN_URL',
tracesSampleRate: 1.0
});
try {
riskyFunction();
} catch (err) {
Sentry.captureException(err);
}
Пользовательские уведомления Использовать компоненты уведомлений для отображения ошибок пользователю. При этом важно различать ошибки критические (сервер недоступен) и не критические (не удалось загрузить отдельный элемент UI).
Фолбэки (Fallback) Для компонентов можно реализовать fallback-контент при ошибке загрузки данных:
{#if error}
<div class="error">Произошла ошибка: {error}</div>
{:else}
<DataComponent {data} />
{/if}
info, warn,
error.Эта стратегия позволяет строить устойчивые SvelteKit приложения, где ошибки отслеживаются, логируются и обрабатываются корректно, без прерывания пользовательского опыта.