跳至主要内容

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>