diff --git a/.changeset/stale-dogs-rule.md b/.changeset/stale-dogs-rule.md new file mode 100644 index 000000000000..cf8b47578063 --- /dev/null +++ b/.changeset/stale-dogs-rule.md @@ -0,0 +1,5 @@ +--- +'@sveltejs/kit': patch +--- + +Return 404 when fetching missing data during prerender diff --git a/packages/kit/src/runtime/server/index.js b/packages/kit/src/runtime/server/index.js index a8ffc66630d0..bb383f85fd82 100644 --- a/packages/kit/src/runtime/server/index.js +++ b/packages/kit/src/runtime/server/index.js @@ -259,6 +259,10 @@ export async function respond(request, options, state = {}) { }); } + if (state.prerender) { + return new Response('not found', { status: 404 }); + } + // we can't load the endpoint from our own manifest, // so we need to make an actual HTTP request return await fetch(request); diff --git a/packages/kit/src/runtime/server/page/load_node.js b/packages/kit/src/runtime/server/page/load_node.js index 1aca3f4eb4da..296128a6eecd 100644 --- a/packages/kit/src/runtime/server/page/load_node.js +++ b/packages/kit/src/runtime/server/page/load_node.js @@ -190,7 +190,8 @@ export async function load_node({ response = await respond(new Request(new URL(requested, event.url).href, opts), options, { fetched: requested, - initiator: route + initiator: route, + prerender: state.prerender }); if (state.prerender) { diff --git a/packages/kit/test/prerendering/basics/src/routes/fetch-404.svelte b/packages/kit/test/prerendering/basics/src/routes/fetch-404.svelte new file mode 100644 index 000000000000..b44cf77ecfc1 --- /dev/null +++ b/packages/kit/test/prerendering/basics/src/routes/fetch-404.svelte @@ -0,0 +1,17 @@ + + + + +