入门
Web 标准
在 GitHub 上编辑此页面在整个文档中,您会看到对 SvelteKit 构建在其之上的标准 Web API 的引用。我们没有重新发明轮子,而是使用平台,这意味着您现有的 Web 开发技能适用于 SvelteKit。相反,花时间学习 SvelteKit 将帮助您在其他地方成为更好的 Web 开发人员。
这些 API 在所有现代浏览器和许多非浏览器环境中都可用,如 Cloudflare Workers、Deno 和 Vercel Edge Functions。在开发过程中,以及在基于 Node 的环境(包括 AWS Lambda)的 适配器 中,它们在必要时通过多态填充程序提供(目前是这样——Node 正在迅速增加对更多 Web 标准的支持)。
特别是,您会熟悉以下内容
Fetch API永久链接
SvelteKit 使用 fetch 从网络获取数据。它在 钩子 和 服务器路由 以及浏览器中可用。
fetch的特殊版本可在load函数、服务器钩子 和 API 路由 中使用,用于在服务器端渲染期间直接调用端点,而无需进行 HTTP 调用,同时保留凭据。(要在load之外的服务器端代码中进行凭据获取,必须显式传递cookie和/或authorization标头。)它还允许你进行相对请求,而服务器端fetch通常需要一个完全限定的 URL。
除了 fetch 本身,Fetch API 还包括以下接口
Requestpermalink
Request 的实例可以在 钩子 和 服务器路由 中作为 event.request 访问。它包含一些有用的方法,例如 request.json() 和 request.formData(),用于获取发布到端点的数据。
Responsepermalink
Response 的实例由 await fetch(...) 和 +server.js 文件中的处理程序返回。从根本上讲,SvelteKit 应用程序是一个将 Request 转换为 Response 的机器。
Headerspermalink
Headers 接口允许你读取传入的 request.headers 并设置传出的 response.headers。例如,你可以按如下所示获取 request.headers,并使用 json 便捷函数 发送修改后的 response.headers
tsimport {json } from '@sveltejs/kit';/** @type {import('./$types').RequestHandler} */export functionGET ({request }) {// log all headersconsole .log (...request .headers );// create a JSON Response using a header we receivedreturnjson ({// retrieve a specific headeruserAgent :request .headers .get ('user-agent')}, {// set a header on the responseheaders : { 'x-custom-header': 'potato' }});}
tsimport {json } from '@sveltejs/kit';import type {RequestHandler } from './$types';export constGET :RequestHandler = ({request }) => {// log all headersconsole .log (...request .headers );// create a JSON Response using a header we receivedreturnjson ({// retrieve a specific headeruserAgent :request .headers .get ('user-agent'),},{// set a header on the responseheaders : { 'x-custom-header': 'potato' },},);};
FormDatapermalink
在处理 HTML 原生表单提交时,你将使用 FormData 对象。
tsimport {json } from '@sveltejs/kit';/** @type {import('./$types').RequestHandler} */export async functionPOST (event ) {constbody = awaitevent .request .formData ();// log all fieldsconsole .log ([...body ]);returnjson ({// get a specific field's valuename :body .get ('name') ?? 'world'});}
tsimport {json } from '@sveltejs/kit';import type {RequestHandler } from './$types';export constPOST :RequestHandler = async (event ) => {constbody = awaitevent .request .formData ();// log all fieldsconsole .log ([...body ]);returnjson ({// get a specific field's valuename :body .get ('name') ?? 'world',});};
流 APIpermalink
大多数情况下,你的端点将返回完整的数据,如上文中的 userAgent 示例。有时,你可能需要返回一个响应,该响应太大而无法一次性放入内存中,或者分块传递,为此,平台提供了 流 — ReadableStream、WritableStream 和 TransformStream。
URL APIpermalink
URL 由 URL 接口表示,其中包含有用的属性,如 origin 和 pathname(在浏览器中还有 hash)。此接口显示在各个地方——event.url 在 hooks 和 服务器路由 中,$page.url 在 页面 中,from 和 to 在 beforeNavigate 和 afterNavigate 中,依此类推。
URLSearchParams永久链接
无论在何处遇到 URL,都可以通过 url.searchParams 访问查询参数,它是 URLSearchParams 的一个实例
tsconstfoo =url .searchParams .get ('foo');
Web Crypto永久链接
可以通过 crypto 全局变量使用 Web Crypto API。它在内部用于 内容安全策略 头,但你也可以使用它来执行诸如生成 UUID 之类的事情
tsconstuuid =crypto .randomUUID ();