Skip to content

Commit c3c700f

Browse files
authored
Return 404s from fetch in load during prerender (#4324)
* return 404 for missing fetched content during prerendering * changeset
1 parent 8adec6f commit c3c700f

File tree

5 files changed

+33
-1
lines changed

5 files changed

+33
-1
lines changed

.changeset/stale-dogs-rule.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
'@sveltejs/kit': patch
3+
---
4+
5+
Return 404 when fetching missing data during prerender

packages/kit/src/runtime/server/index.js

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -259,6 +259,10 @@ export async function respond(request, options, state = {}) {
259259
});
260260
}
261261

262+
if (state.prerender) {
263+
return new Response('not found', { status: 404 });
264+
}
265+
262266
// we can't load the endpoint from our own manifest,
263267
// so we need to make an actual HTTP request
264268
return await fetch(request);

packages/kit/src/runtime/server/page/load_node.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -190,7 +190,8 @@ export async function load_node({
190190

191191
response = await respond(new Request(new URL(requested, event.url).href, opts), options, {
192192
fetched: requested,
193-
initiator: route
193+
initiator: route,
194+
prerender: state.prerender
194195
});
195196

196197
if (state.prerender) {
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
<script context="module">
2+
/** @type {import('./fetch-404').Load} */
3+
export async function load({ fetch }) {
4+
const { status } = await fetch('/missing.json');
5+
6+
return {
7+
props: { status }
8+
};
9+
}
10+
</script>
11+
12+
<script>
13+
/** @type {number} */
14+
export let status;
15+
</script>
16+
17+
<h1>status: {status}</h1>

packages/kit/test/prerendering/basics/test/test.js

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -109,4 +109,9 @@ test('prerendering is set to true in global code of hooks.js', () => {
109109
assert.ok(content.includes('<h1>prerendering: true/true</h1>'), content);
110110
});
111111

112+
test('fetching missing content results in a 404', () => {
113+
const content = read('fetch-404.html');
114+
assert.ok(content.includes('<h1>status: 404</h1>'), content);
115+
});
116+
112117
test.run();

0 commit comments

Comments
 (0)