Basically, how to do the ff. in SvelteKit:
After reading through the updated docs, I found this:
If an error occurs during
load
, SvelteKit will render a default error page. You can customise this error page on a per-route basis by adding an+error.svelte
file:src/routes/blog/[slug]/+error.svelte <script> import { page } from '$app/stores'; </script> <h1>{$page.status}: {$page.error.message}</h1>
SvelteKit will 'walk up the tree' looking for the closest error boundary — if the file above didn't exist it would try
src/routes/blog/+error.svelte
andsrc/routes/+error.svelte
before rendering the default error page.
Of course, this is your own error page component so you may modify it however you want.
If you have the following in your code, please update it to the updated solution found in the docs (as shown above).
__error.svelte
file in your routes folder.<script context="module"> export function load({ error, status }) { return { props: { title: `${status}: ${error.message}` } }; } </script> <script> export let title; </script> <h1>{title}</h1>
props
inside the load
function, by the way):<script context="module"> export function load({ error, status }) { return { props: { message: error.message, status // same as status: status } }; } </script> <script> import ErrorScreen from '../components/screens/ErrorScreen.svelte'; // your own Error screen component import NotFoundScreen from '../components/screens/NotFoundScreen.svelte'; // your own 404 screen component export let message; export let status; </script> {#if status == 404} <!-- Used '==' instead of '===' to match string/number status code (just to be sure) --> <NotFoundScreen /> {:else} <ErrorScreen {message} {status} /> {/if}
#if status == 404
to like #if status == 500
to see if everything works. (Don't forget to change it back to 404
).December 2022 solution
as per docs: https://kit.svelte.dev/docs/advanced-routing#rest-parameters-404-pages
create: src/routes/[...path]/+page.js
containing:
import { error } from '@sveltejs/kit';
export function load() {
throw error(404, '/not-found whatever you want');
}
also create: src/routes/[...path]/+error.svelte
containing (for example):
<script>
import { page } from '$app/stores';
</script>
<div>
<h1>It seems there has been an error, sorry about that.</h1>
{#if $page?.error}
<div class="mt-4 p-4 border-y-2">
{#if $page?.status}
<p>Page status: {$page?.status}</p>
{/if}
{#if $page?.error?.message}
<p>Error message: {$page?.error?.message}</p>
{/if}
</div>
{/if}
</div>
btw, maybe you have some style in layouts, maybe even layout groups so be sure to put a layout file in the same dir to apply them, e.g.:
src/routes/[...path]/+layout.svelte
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With