不是所有请求都适合走页面和表单。
有些请求天生就是接口型的,比如:
- JSON 数据
- Webhook
- 供客户端增量刷新的查询接口
- 第三方系统调用
- 文件下载
这时就该用 +server.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);
};把它翻成剧场语言:
+page / +layout = 正式舞台
actions = 售票窗口
+server = 独立服务台这三者不是互斥关系,而是同一剧院里的不同窗口。