全书目录

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

第十一章:`+server` —— 剧场侧门服务台

1 分钟 128 字 第 549 / 962 个阅读单元

不是所有请求都适合走页面和表单。

有些请求天生就是接口型的,比如:

  • JSON 数据
  • Webhook
  • 供客户端增量刷新的查询接口
  • 第三方系统调用
  • 文件下载

这时就该用 +server.ts

ts
// src/routes/api/plays/+server.ts
import { json } from '@sveltejs/kit';
import type { RequestHandler } from './$types';
import { db } from '$lib/server/db';

export const GET: RequestHandler = async ({ url }) => {
  const q = url.searchParams.get('q') ?? '';

  const plays = await db.play.findMany({
    where: q
      ? {
          title: {
            contains: q,
            mode: 'insensitive'
          }
        }
      : undefined,
    select: {
      title: true,
      slug: true
    },
    orderBy: {
      opensAt: 'asc'
    }
  });

  return json(plays);
};

把它翻成剧场语言:

text
+page / +layout  = 正式舞台
actions          = 售票窗口
+server          = 独立服务台

这三者不是互斥关系,而是同一剧院里的不同窗口。