Skip to main content
Svelte 基础
介绍
响应式
属性
逻辑
事件
绑定
类和样式
Actions
过渡动画
Svelte 进阶
高级响应性
复用内容
Motion
高级绑定
高级过渡效果
Context API
特殊元素
<script module>
后续步骤
SvelteKit 基础
介绍
路由
加载数据
请求头和 Cookie
共享模块
表单
API 路由
$app/state
错误和重定向
SvelteKit 进阶
钩子函数
页面选项
链接选项
高级路由
高级加载
环境变量
结论

SvelteKit 提供了几个 钩子 — 用于拦截和覆盖框架的默认行为。

最基本的钩子是 handle,它位于 src/hooks.server.js 中。它接收一个 event 对象和一个 resolve 函数,并返回一个 Response

resolve 就是神奇之处:SvelteKit 将传入的请求 URL 与应用程序的路由匹配,导入相关代码(+page.server.js+page.svelte 文件等),加载路由所需的数据,并生成响应。

默认的 handle 钩子如下所示:

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

对于页面(相对于 API 路由),你可以使用 transformPageChunk 修改生成的 HTML:

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

你还可以创建全新的路由:

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"'
		)
	});
}

在 GitHub 编辑此页面

上一页 下一页
1
2
<h1>hello world</h1>
<a href="/ping">ping</a>