hooks.server.ts 是 SvelteKit 里最像“总控室”的地方。
它会在每个进入剧场的请求上介入。
这意味着它很适合做:
- 从 cookie 读取会话
- 把用户挂到
event.locals - 统一埋点
- 某些全局鉴权前置逻辑
- 修改响应头
- 特定路径的特殊处理
典型例子:
// src/hooks.server.ts
import type { Handle } from '@sveltejs/kit';
import { getUserBySession } from '$lib/server/auth';
export const handle: Handle = async ({ event, resolve }) => {
const session = event.cookies.get('session');
event.locals.user = session
? await getUserBySession(session)
: null;
const response = await resolve(event);
response.headers.set('x-theater', 'stardust');
return response;
};然后你就可以在服务端 load、actions、+server 里共享这一请求上下文:
// src/routes/admin/+page.server.ts
import { redirect } from '@sveltejs/kit';
import type { PageServerLoad } from './$types';
export const load: PageServerLoad = async ({ locals }) => {
if (!locals.user?.isAdmin) {
redirect(303, '/login');
}
return {};
};这条链路特别像现实剧院:
观众入场
-> 总控室先看证件
-> 把身份信息贴到本次通行单上
-> 后续各岗位都能读这张单子SvelteKit 里的这张“通行单”,就是 event.locals。