Basic Svelte
Bindings
Classes and styles
Advanced Svelte
Advanced reactivity
Motion
Advanced bindings
Advanced transitions
Context API
Special elements
<script module>
Next steps
Basic SvelteKit
Introduction
Routing
Loading data
Headers and cookies
Shared modules
API routes
$app/state
Errors and redirects
Advanced SvelteKit
Page options
Link options
Advanced routing
Advanced loading
Environment variables
Conclusion
handleError
hook は、予期せぬエラー(unexpected errors)をインターセプトし、何らかの動作をトリガーすることができます。例えば、エラーが起きたときに Slack channel に通知したり、エラーロギングサービスにデータを送ったりします。
前の演習を振り返ると、@sveltejs/kit
からインポートする error
ヘルパーで作成されていないエラーは、 予期せぬ(unexpected) エラーです。それは通常、アプリを修正する必要があるということです。デフォルトの動作としては、エラーをログに記録します:
export function handleError({ event, error }) {
console.error(error.stack);
}
/the-bad-place
に移動すると、この動作を見ることができます — エラーページが表示され、(URL バーの右にあるボタンを押して) ターミナルを開くと src/routes/the-bad-place/+page.server.js
からのメッセージが表示されているはずです。
エラーメッセージをユーザーに表示していないことにご注目ください。これは、エラーメッセージには機密情報が含まれている可能性があり、ユーザーを混乱させ、最悪の場合、悪意のある人間に利用される可能性があるからです。そのため、アプリケーションで利用できるエラーオブジェクト (+error.svelte
ページでは page.error
、src/error.html
フォールバック では %sveltekit.error%
) はこれだけです:
{
message: 'Internal Error' // or 'Not Found' for a 404
}
状況によっては、このオブジェクトをカスタマイズしたいでしょう。そのためには、handleError
からオブジェクトを返します:
export function handleError({ event, error }) {
console.error(error.stack);
return {
message: 'everything is fine',
code: 'JEREMYBEARIMY'
};
}
カスタムのエラーページで message
以外のプロパティを参照できるようになりました。src/routes/+error.svelte
を作成しましょう:
<script>
import { page } from '$app/state';
</script>
<h1>{page.status}</h1>
<p>{page.error.message}</p>
<p>error code: {page.error.code}</p>
<script lang="ts">
import { page } from '$app/state';
</script>
<h1>{page.status}</h1>
<p>{page.error.message}</p>
<p>error code: {page.error.code}</p>
<h1>home</h1>