跳至主要內容

handleError hook 讓您可以攔截非預期的錯誤並觸發某些行為,例如 ping Slack 頻道或將資料傳送至錯誤記錄服務。

您應該還記得在先前的練習中,如果錯誤不是使用 @sveltejs/kit 中的 error helper 建立的,則該錯誤是非預期的。這通常表示您的應用程式中的某些內容需要修正。預設行為是記錄錯誤

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>