MeWrite Docs

SvelteKit: Error in load function

SvelteKitのload関数でエラーが発生した場合の対処法

概要

SvelteKitのload関数でデータ取得やバリデーションエラーが発生した場合の対処法です。

エラーメッセージ

``` 500: Internal Error Error in load function ```

原因

  1. fetch失敗: 外部APIへの接続エラー
  2. 認証エラー: セッションが無効
  3. 存在しないデータ: 404相当
  4. 型エラー: undefinedアクセス

解決策

1. errorヘルパーを使用

```typescript // src/routes/users/[id]/+page.server.ts import { error } from ‘@sveltejs/kit’; import type { PageServerLoad } from ‘./$types’;

export const load: PageServerLoad = async ({ params, fetch }) => { const response = await fetch(`/api/users/${params.id}`);

if (!response.ok) { if (response.status === 404) { throw error(404, ‘User not found’); } throw error(500, ‘Failed to load user’); }

return { user: await response.json() }; }; ```

2. +error.svelteを作成

```svelte

{#if $page.status === 404} Go back home {/if} ```

3. 認証チェック

```typescript // src/routes/admin/+layout.server.ts import { redirect } from ‘@sveltejs/kit’; import type { LayoutServerLoad } from ‘./$types’;

export const load: LayoutServerLoad = async ({ locals }) => { if (!locals.user) { throw redirect(303, ‘/login’); }

if (!locals.user.isAdmin) { throw error(403, ‘Admin access required’); }

return { user: locals.user }; }; ```

4. フォームバリデーション

```typescript // src/routes/contact/+page.server.ts import { fail } from ‘@sveltejs/kit’; import type { Actions } from ‘./$types’;

export const actions: Actions = { default: async ({ request }) => { const data = await request.formData(); const email = data.get(’email’);

if (!email || typeof email !== 'string') {
  return fail(400, { email, missing: true });
}

if (!email.includes('@')) {
  return fail(400, { email, invalid: true });
}

// 処理を続行
return { success: true };

} }; ```

よくある間違い

  • throw new Error()を使う(errorヘルパーを使うべき)
  • サーバーloadでブラウザAPIを使用
  • +page.tsと+page.server.tsの混同

関連エラー

関連エラー

Svelte の他のエラー

最終更新: 2025-12-11