在整个文档中,您将看到对 SvelteKit 所构建在之上的标准[Web API](https://developer.mozilla.org/en-US/docs/Web/API)的引用。我们不是重新发明轮子,而是*使用平台*,这意味着您的现有 Web 开发技能适用于 SvelteKit。相反,学习 SvelteKit 所花费的时间将帮助您在其他地方成为一名更好的 Web 开发者。 这些 API 在所有现代浏览器以及许多非浏览器环境中都可用,如 Cloudflare Workers、Deno 和 Vercel Functions。在开发过程中,以及在基于 Node 的环境(包括 AWS Lambda)的[适配器](adapters)中,它们通过必要的 polyfills 提供(目前是这样的——Node 正在快速增加对更多 Web 标准的支持)。 特别是,您将熟悉以下内容: ## 获取 API SvelteKit 使用 [`fetch`](https://developer.mozilla.org/en-US/docs/Web/API/fetch) 从网络获取数据。它也存在于 [hooks](hooks) 和 [服务器路由](routing#server) 以及浏览器中。 > \[注意\] 在[`load`](load)函数、[服务器钩子](hooks#Server-hooks)和[API 路由](routing#server)中提供了一个特殊的`fetch`版本,用于在服务器端渲染期间直接调用端点,无需进行 HTTP 调用,同时保留凭证。(要在`load`之外的服务器端代码中进行凭证化的 fetch,您必须显式传递`cookie`和/或`authorization`头。)它还允许您进行相对请求,而服务器端的`fetch`通常需要完全限定的 URL。 除了 `fetch` 本身之外,[Fetch API](https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API) 还包括以下接口: ### 请求 一个 [`Request`](https://developer.mozilla.org/en-US/docs/Web/API/Request) 实例可在 [钩子](hooks) 和 [服务器路由](routing#server) 中通过 `event.request` 访问。它包含如 `request.json()` 和 `request.formData()` 等有用的方法,用于获取发送到端点的数据。 ### 响应 一个 [`Response`](https://developer.mozilla.org/en-US/docs/Web/API/Response) 实例从 `await fetch(...)` 和 `+server.js` 文件中的处理器返回。本质上,SvelteKit 应用是一个将 `Request` 转换为 `Response` 的机器。 ### 头信息 The [`头部`](https://developer.mozilla.org/en-US/docs/Web/API/Headers)接口允许您读取传入的 `request.headers` 并设置输出的 `response.headers`。例如,您可以像下面这样获取 `request.headers`,并使用 [`json` 便利函数](@sveltejs-kit#json)发送修改后的 `response.headers`: ```js // @errors: 2461 /// file: src/routes/what-is-my-user-agent/+server.js import { json } from '@sveltejs/kit'; /** @type {import('./$types').RequestHandler} */ export function GET({ request }) { // log all headers console.log(...request.headers); // create a JSON Response using a header we received return json({ // retrieve a specific header userAgent: request.headers.get('user-agent') }, { // set a header on the response headers: { 'x-custom-header': 'potato' } }); } ``` ## FormData 处理 HTML 原生表单提交时,您将处理[`FormData`](https://developer.mozilla.org/en-US/docs/Web/API/FormData)对象。 ```js // @errors: 2461 /// file: src/routes/hello/+server.js import { json } from '@sveltejs/kit'; /** @type {import('./$types').RequestHandler} */ export async function POST(event) { const body = await event.request.formData(); // log all fields console.log([...body]); return json({ // get a specific field's value name: body.get('name') ?? 'world' }); } ``` ## 流 API 大多数情况下,您的端点将返回完整的数据,如上面`userAgent`示例所示。有时,您可能需要返回一个太大而无法一次性放入内存的响应,或者以分块形式发送的响应,为此平台提供了[流](https://developer.mozilla.org/en-US/docs/Web/API/Streams_API)—— [可读流](https://developer.mozilla.org/en-US/docs/Web/API/ReadableStream)、[可写流](https://developer.mozilla.org/en-US/docs/Web/API/WritableStream)和[转换流](https://developer.mozilla.org/en-US/docs/Web/API/TransformStream)。 ## URL API URL 由 [`URL`](https://developer.mozilla.org/en-US/docs/Web/API/URL) 接口表示,该接口包括如 `origin` 和 `pathname`(以及在浏览器中,`hash`)等有用属性。此接口在各种地方出现——在 [hooks](hooks) 和 [server routes](routing#server) 中的 `event.url`,在 [pages](routing#page) 中的 [`page.url`]($app-state),在 [`beforeNavigate` 和 `afterNavigate`]($app-navigation) 中的 `from` 和 `to` 等等。 ### URLSearchParams 无论您在哪里遇到 URL,您都可以通过`url.searchParams`访问查询参数,它是一个`URLSearchParams`的实例:[`URLSearchParams`](https://developer.mozilla.org/en-US/docs/Web/API/URLSearchParams): ```js // @filename: ambient.d.ts declare global { const url: URL; } export {}; // @filename: index.js // ---cut--- const foo = url.searchParams.get('foo'); ``` ## 网络加密 The [Web Crypto API](https://developer.mozilla.org/en-US/docs/Web/API/Web_Crypto_API) is made available via the `crypto` global. It's used internally for [Content Security Policy](configuration#csp) headers, but you can also use it for things like generating UUIDs: ```js const uuid = crypto.randomUUID(); ```