sveltekit-data-flow

Compare original and translation side by side

🇺🇸

Original

English
🇨🇳

Translation

Chinese

SvelteKit Data Flow

SvelteKit 数据流

Quick Start

快速入门

Which file? Server-only (DB/secrets):
+page.server.ts
| Universal (runs both):
+page.ts
| API:
+server.ts
Load decision: Need server resources? → server load | Need client APIs? → universal load
Form actions: Always
+page.server.ts
. Return
fail()
for errors, throw
redirect()
to navigate, throw
error()
for failures.
选择哪个文件? 仅服务端(数据库/密钥):
+page.server.ts
| 通用(两端运行):
+page.ts
| API:
+server.ts
Load函数决策: 需要服务端资源?→ 服务端load | 需要客户端API?→ 通用load
表单操作: 始终使用
+page.server.ts
。返回
fail()
处理错误,抛出
redirect()
进行页面跳转,抛出
error()
处理失败情况。

Example

示例

typescript
// +page.server.ts
import { fail, redirect } from '@sveltejs/kit';

export const load = async ({ locals }) => {
	const user = await db.users.get(locals.userId);
	return { user }; // Must be JSON-serializable
};

export const actions = {
	default: async ({ request }) => {
		const data = await request.formData();
		const email = data.get('email');

		if (!email) return fail(400, { email, missing: true });

		await updateEmail(email);
		throw redirect(303, '/success');
	},
};
typescript
// +page.server.ts
import { fail, redirect } from '@sveltejs/kit';

export const load = async ({ locals }) => {
	const user = await db.users.get(locals.userId);
	return { user }; // Must be JSON-serializable
};

export const actions = {
	default: async ({ request }) => {
		const data = await request.formData();
		const email = data.get('email');

		if (!email) return fail(400, { email, missing: true });

		await updateEmail(email);
		throw redirect(303, '/success');
	},
};

Reference Files

参考文档

  • load-functions.md - Server vs universal
  • form-actions.md - Form handling patterns
  • serialization.md - What can/can't serialize
  • error-redirect-handling.md - fail/redirect/error
  • client-auth-invalidation.md - invalidateAll() after client-side auth
  • load-functions.md - 服务端与通用对比
  • form-actions.md - 表单处理模式
  • serialization.md - 可序列化/不可序列化内容
  • error-redirect-handling.md - fail/redirect/error方法处理
  • client-auth-invalidation.md - 客户端认证后调用invalidateAll()

Notes

注意事项

  • Server load → universal load via
    data
    param | ALWAYS
    throw redirect()/error()
  • No class instances/functions from server load (not serializable)
  • Last verified: 2025-01-11
<!-- PROGRESSIVE DISCLOSURE GUIDELINES: - Keep this file ~50 lines total (max ~150 lines) - Use 1-2 code blocks only (recommend 1) - Keep description <200 chars for Level 1 efficiency - Move detailed docs to references/ for Level 3 loading - This is Level 2 - quick reference ONLY, not a manual LLM WORKFLOW (when editing this file): 1. Write/edit SKILL.md 2. Format (if formatter available) 3. Run: claude-skills-cli validate <path> 4. If multi-line description warning: run claude-skills-cli doctor <path> 5. Validate again to confirm -->
  • 服务端load通过
    data
    参数传递给通用load | 始终使用
    throw redirect()/error()
  • 服务端load不能返回类实例/函数(不可序列化)
  • 最后验证时间: 2025-01-11
<!-- 渐进式披露指南: - 保持本文件总长度约50行(最多约150行) - 仅使用1-2个代码块(推荐1个) - Level 1效率要求:描述内容少于200字符 - 详细文档移至references/目录用于Level 3加载 - 本文件为Level 2 - 仅作为快速参考,而非手册 LLM 编辑工作流: 1. 编写/编辑SKILL.md 2. 格式化(若有格式化工具) 3. 运行:claude-skills-cli validate <path> 4. 若出现多行描述警告:运行claude-skills-cli doctor <path> 5. 再次验证确认 -->