SvelteKit 的 load 非常好用,但也最容易被用坏。
你要牢牢记住三条工程纪律。
#1. load 更像“准备舞台”,不是“偷偷改剧院状态”
坏心智:
在 load 里顺手写数据库
在 load 里改全局 store
在 load 里塞副作用好心智:
load 应该尽量像一个纯调度函数
读取请求上下文
准备渲染所需数据
返回给页面#2. 不要在服务端共享变量里存用户状态
这是 SvelteKit 官方专门强调的坑。
错误示意:
// 千万别这么做
let currentUser: { name: string } | null = null;如果你在长生命周期服务端进程里这么干,不同用户请求可能互相串台。
剧院后台不是只服务一个观众,它是全场共享的。
所以正确方案应是:
- 会话用
cookies - 用户信息放
event.locals - 长期数据进数据库/缓存
- 页面数据通过
load返回
#3. 不要只在 layout load 做唯一权限判断
这是很多人第一次做鉴权时会踩的坑。
因为布局层 load 不是每次子页面切换都完整重跑同样的权限流程。
它更像“这一层舞台的公共准备”,而不是“所有后台入口的总保安”。
所以真正的权限校验应在这些地方落地:
hooks.server.ts- 具体的
+page.server.ts - 具体的
actions - 具体的
+server.ts
也就是说:
layout 可以展示“当前用户是谁”
但真正决定“这张票能不能进后台”
应由更靠近请求边界的服务端逻辑负责