Веб-стандарты
В этой документации вы встретите ссылки на стандартные Web API, поверх которых построен SvelteKit. Вместо изобретения велосипедов мы используем платформу, что означает применимость ваших существующих навыков веб-разработки. И наоборот — изучение SvelteKit сделает вас лучше как разработчика.
Эти API доступны во всех современных браузерах и многих небраузерных средах вроде Cloudflare Workers, Deno и Vercel Functions. Во время разработки и в адаптерах для Node-сред (включая AWS Lambda) они реализованы через полифиллы где это необходимо (хотя Node активно добавляет поддержку веб-стандартов).
Особое внимание стоит уделить следующим разделам:
Fetch API
Заголовок раздела «Fetch API»SvelteKit использует fetch для получения данных из сети. Данный метод доступен в хуках, серверных роутах и браузере.
Помимо самого fetch, Fetch API включает:
Request
Заголовок раздела «Request»Экземпляр Request доступен в хуках и серверных роутах как event.request. Содержит методы вроде request.json() и request.formData() для получения отправленных данных.
Response
Заголовок раздела «Response»Экземпляр Response возвращается из await fetch(...) и обработчиков в +server.js. По сути, SvelteKit-приложение — это машина для преобразования Request в Response.
Headers
Заголовок раздела «Headers»Интерфейс Headers позволяет читать входящие request.headers и устанавливать исходящие response.headers. Для удобства можно использовать функцию json, которая автоматически устанавливает правильные заголовки. Например:
import { json } from '@sveltejs/kit';
/** @type {import('./$types').RequestHandler} */export function GET({ request }) { // записываем все заголовки console.log(...request.headers);
// создаем JSON Response, используя полученный заголовок return json({ // получаем конкретный заголовок userAgent: request.headers.get('user-agent') }, { // устанавливаем заголовок ответа headers: { 'x-custom-header': 'potato' } });}import { json } from '@sveltejs/kit';import type { RequestHandler } from './$types';
export const GET: RequestHandler = ({ request }) => { // записываем все заголовки console.log(...request.headers);
// создаем JSON Response, используя полученный заголовок return json({ // получаем конкретный заголовок userAgent: request.headers.get('user-agent') }, { // устанавливаем заголовок ответа headers: { 'x-custom-header': 'potato' } });};FormData
Заголовок раздела «FormData»При работе с отправкой нативных HTML-форм вы будете иметь дело с объектами FormData.
import { json } from '@sveltejs/kit';
/** @type {import('./$types').RequestHandler} */export async function POST(event) { const body = await event.request.formData();
// выводим в консоль все поля console.log([...body]);
return json({ // получаем значение конкретного поля name: body.get('name') ?? 'world' });}import { json } from '@sveltejs/kit';import type { RequestHandler } from './$types';
export const POST: RequestHandler = async (event) => { const body = await event.request.formData();
// выводим в консоль все поля console.log([...body]);
return json({ // получаем значение конкретного поля name: body.get('name') ?? 'world' });};Stream API
Заголовок раздела «Stream API»В большинстве случаев ваши эндпойнты будут возвращать полные данные, как в примере с userAgent выше. Однако иногда может потребоваться вернуть ответ, который слишком велик для обработки в памяти целиком или доставляется частями. Для таких случаев платформа предоставляет потоки — ReadableStream, WritableStream и TransformStream.
URL API
Заголовок раздела «URL API»URL представлены интерфейсом URL, который включает полезные свойства, такие как origin, pathname (и в браузере — hash). Этот интерфейс встречается в различных местах:
event.urlв хуках и серверных маршрутахpage.urlна страницах- Параметры
fromиtoвbeforeNavigateиafterNavigate
URLSearchParams
Заголовок раздела «URLSearchParams»При работе с URL вы можете получить доступ к параметрам запроса через url.searchParams, который является экземпляром URLSearchParams:
const foo = url.searchParams.get('foo');Web Crypto
Заголовок раздела «Web Crypto»Web Crypto API доступен через глобальный объект crypto. Он используется внутри SvelteKit для заголовков Content Security Policy (CSP), но вы также можете применять его для таких задач, как генерация UUID:
const uuid = crypto.randomUUID();