跳至主要内容

event 对象有一个 fetch 方法,其行为类似于标准的 Fetch API,但拥有超能力

  • 它可用于在服务器上进行经过身份验证的请求,因为它继承了来自传入请求的 cookieauthorization 标头
  • 它可以在服务器上进行相对请求(通常,fetch 在服务器上下文中使用时需要具有原点的 URL)
  • 内部请求(例如,针对 +server.js 路由的请求)在服务器上运行时会直接转到处理程序函数,而无需 HTTP 调用的开销

其行为可以通过 handleFetch 钩子修改,默认情况下如下所示

src/hooks.server
export async function handleFetch({ event, request, fetch }) {
	return await fetch(request);
}

例如,我们可以使用来自 src/routes/b/+server.js 的响应来响应对 src/routes/a/+server.js 的请求

src/hooks.server
export async function handleFetch({ event, request, fetch }) {
	const url = new URL(request.url);
	if (url.pathname === '/a') {
		return await fetch('/b');
	}

	return await fetch(request);
}

稍后,当我们介绍 通用 load 函数 时,我们将看到 event.fetch 也可以从浏览器中调用。在这种情况下,如果您有来自浏览器的对公共 URL(例如 https://api.yourapp.com)的请求,并且在服务器上运行时应将其重定向到内部 URL(绕过 API 服务器和公共互联网之间存在的任何代理和负载均衡器),则 handleFetch 很有用。

在 GitHub 上编辑此页面

上一个 下一个
1
2
3
4
5
<script>
	let { data } = $props();
</script>
 
<h1>{data.message}</h1>