メインコンテンツへスキップ

handleError フックを使用すると、予期しないエラーをインターセプトし、Slackチャンネルにpingを送信したり、エラーログサービスにデータを送信するなど、何らかの動作をトリガーできます。

以前の演習で思い出したように、エラーは@sveltejs/kiterrorヘルパーで作成されなかった場合、予期しないものです。これは一般的に、アプリ内の何らかの修正が必要であることを意味します。デフォルトの動作はエラーをログに記録することです。

src/hooks.server
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からオブジェクトを返すことができます。

src/hooks.server
export function handleError({ event, error }) {
	console.error(error.stack);

	return {
		message: 'everything is fine',
		code: 'JEREMYBEARIMY'
	};
}

カスタムエラーページでmessage以外のプロパティを参照できるようになりました。src/routes/+error.svelteを作成します。

src/routes/+error
<script>
	import { page } from '$app/stores';
</script>

<h1>{$page.status}</h1>
<p>{$page.error.message}</p>
<p>error code: {$page.error.code}</p>

GitHubでこのページを編集

前へ 次へ
1
<h1>home</h1>