全书目录

第三十篇:SvelteKit 完全指南 —— 轻量反应式剧场宇宙

第八章:`load` 的真正难点,不是会写,而是知道边界

2 分钟 459 字 第 546 / 962 个阅读单元

SvelteKit 的 load 非常好用,但也最容易被用坏。

你要牢牢记住三条工程纪律。

#1. load 更像“准备舞台”,不是“偷偷改剧院状态”

坏心智:

text
在 load 里顺手写数据库
在 load 里改全局 store
在 load 里塞副作用

好心智:

text
load 应该尽量像一个纯调度函数
读取请求上下文
准备渲染所需数据
返回给页面
#2. 不要在服务端共享变量里存用户状态

这是 SvelteKit 官方专门强调的坑。

错误示意:

ts
// 千万别这么做
let currentUser: { name: string } | null = null;

如果你在长生命周期服务端进程里这么干,不同用户请求可能互相串台。
剧院后台不是只服务一个观众,它是全场共享的。

所以正确方案应是:

  • 会话用 cookies
  • 用户信息放 event.locals
  • 长期数据进数据库/缓存
  • 页面数据通过 load 返回
#3. 不要只在 layout load 做唯一权限判断

这是很多人第一次做鉴权时会踩的坑。

因为布局层 load 不是每次子页面切换都完整重跑同样的权限流程
它更像“这一层舞台的公共准备”,而不是“所有后台入口的总保安”。

所以真正的权限校验应在这些地方落地:

  • hooks.server.ts
  • 具体的 +page.server.ts
  • 具体的 actions
  • 具体的 +server.ts

也就是说:

text
layout 可以展示“当前用户是谁”
但真正决定“这张票能不能进后台”
应由更靠近请求边界的服务端逻辑负责