Skip to main content
Basic Svelte
Introduction
Reactivity
Props
Logic
Events
Bindings
Classes and styles
Actions
Transitions
Advanced Svelte
Advanced reactivity
Reusing content
Motion
Advanced bindings
Advanced transitions
Context API
Special elements
<script module>
Next steps
Basic SvelteKit
Introduction
Routing
Loading data
Headers and cookies
Shared modules
Forms
API routes
$app/state
Errors and redirects
Advanced SvelteKit
Hooks
Page options
Link options
Advanced routing
Advanced loading
Environment variables
Conclusion

SvelteKit では、フレームワークのデフォルトの振る舞いをインターセプトしてオーバーライドするための方法として、 hooks をいくつか提供しています。

最も基本的な hook は handle で、src/hooks.server.js に置きます。event オブジェクトと resolve 関数を受け取り、Response オブジェクトを返します。

resolve は魔法が起きる場所です: SvelteKit は受け取ったリクエストの URL とアプリのルート(route)をマッチさせ、関連するコード (+page.server.js+page.svelte ファイルなど) をインポートし、ルートに必要なデータを読み込み、レスポンスを生成します。

デフォルトの handle hook は以下のようなものです:

src/hooks.server
export async function handle({ event, resolve }) {
	return await resolve(event);
}

ページについては (API routes とは対照的に)、transformPageChunk で生成された HTML を変更することができます:

src/hooks.server
export async function handle({ event, resolve }) {
	return await resolve(event, {
		transformPageChunk: ({ html }) => html.replace(
			'<body',
			'<body style="color: hotpink"'
		)
	});
}

また、まったく新しいルート(route)を作成することもできます:

src/hooks.server
export async function handle({ event, resolve }) {
	if (event.url.pathname === '/ping') {
		return new Response('pong');
	}

	return await resolve(event, {
		transformPageChunk: ({ html }) => html.replace(
			'<body',
			'<body style="color: hotpink"'
		)
	});
}

Edit this page on GitHub

1
2
<h1>hello world</h1>
<a href="/ping">ping</a>