ホームページ >ウェブフロントエンド >jsチュートリアル >next.jsアプリルーターでのエラー処理
next.js 13.4アプリルーターのエラー処理ガイド
この記事では、新しいエラーファイル慣習を使用してnext.jsのアプリルーターのエラーを処理する方法を説明します。
エラー処理は、Webアプリケーション開発の重要な側面です。過去には、次の.JSが開発者が404ページや500ページなどのエラーページをカスタマイズすることでエラーを処理するのを支援しました。ただし、これらのページには、特定のUI統合のサポートが限られている、Reactエラー境界の時代遅れのサポート、エラーが発生したときのアプリケーション機能が限られているなど、ページルーターに制限があります。
next.jsバージョン13.4のリリース後、新しいアプリルーターが正式に生産に導入されました。アプリルーターは、エラー処理やWebアプリケーションの構築のその他の基本部分のサポートと開発者エクスペリエンスを強化します。
app
ファイルは、エラーが発生したときにアプリケーションがクラッシュするのを防ぐために、Reactエラー境界を作成します。また、フォールバックコンポーネントとして機能し、境界内でエラーがスローされたときにレンダリングすることもできます。 error.tsx
AuthRequiredError
global-error.tsx
境界に転送します。 error.tsx
ユーザー認証は多くのエラーが発生しやすいため、他のアプリケーションを構築する場合、この状況でエラーを処理する方法を学ぶことは大きなメリットになります。
開始する前に、この記事で使用して、ここにリンクされているリンクをクローン化して使用して使用します(メインブランチ)。アプリケーションを実行した後、下の画像に示されているエラーが表示されます。
このデモアプリケーションでは、メインページ(フォームの表示)にログインしたユーザーのみがアクセスできますが、いくつかのエラーが発生しています(この場合は人工的ですが、合法的に発生する可能性もあります)。 nullに割り当てられる変数。
これはもちろんエラーにつながりますが、今ではアプリケーションがエラーの処理方法がわからないため、アプリケーションが完全にクラッシュします!
ここで、アプリケーションがクラッシュするのを防ぐためにこのエラーに対処する方法を学び、それによりアプリケーションのユーザーエクスペリエンスを大幅に改善します。
アプリケーションがクラッシュするのを防ぐために、app/
ディレクトリで、error.tsx
ファイルを作成します。このファイルを作成すると、メインページをラップするReactエラー境界が自動的に作成されます。次に、error.tsx
ファイルで、次の関数をエクスポートします。
<code class="language-typescript">"use client"; export default function Error() { return ( <div classname="grid h-screen px-4 bg-white place-content-center"> <div classname="text-center"> <h1 classname="font-black text-gray-200 text-9xl">401</h1> <p classname="text-2xl font-bold tracking-tight text-gray-900 sm:text-4xl"> 未授权! </p> <p classname="mt-4 text-gray-500"> 您必须登录才能访问此页面 </p> <button type="button" classname="inline-block px-5 py-3 mt-6 text-sm font-medium text-white bg-indigo-600 rounded hover:bg-indigo-700 focus:outline-none focus:ring"> 重试 </button> </div> </div> ); }</code>
注:エラーコンポーネントはクライアントコンポーネントである必要があります!それらをクライアントコンポーネントとしてマークするようにしてください。
エクスポートされた関数は、フォールバックコンポーネントとして機能します。境界内にエラーがスローされた場合、エラーがキャッチされ、フォールバックコンポーネントがレンダリングされます。これは以下のように見えます。
<code class="language-typescript">"use client"; type ErrorProps = { error: Error; reset: () => void; }; export default function Error({ error, reset }: ErrorProps) { // ... }</code>エラープロップを介してエラーメッセージにアクセスし、次のように画面に表示することができます。
この関数が呼び出されると、リセット関数は、エラー境界に囲まれた元のコンテンツを返信しようとします。成功した場合、フォールバックエラーコンポーネントは再レンダリングされたコンテンツに置き換えられます。
<code class="language-typescript"><p classname="mt-4 text-gray-500"> {error.message || "您必须登录才能访问此页面"} </p></code>オンクリックハンドラーを使用してボタンにリセット機能呼び出しを実装できます:
このように、私たちは間違いをうまく処理しました!
抽象エラーメッセージ
<code class="language-typescript"><button type="button" onclick="{()"> reset()} className="inline-block px-5 py-3 mt-6 text-sm font-medium text-white bg-indigo-600 rounded hover:bg-indigo-700 focus:outline-none focus:ring cursor-pointer" > 重试 </button></code>
実際のユーザー認証アプリケーションでは、保護する必要があるルートがたくさんある場合があり、認証エラーが発生した場合は、複数の場合に同じ認証エラーメッセージを使用する必要があります。
というディレクトリを作成し、
と呼ばれるファイルを作成します。このファイルでは、次のようにカスタム認証エラーの例外を作成およびエクスポートできます。今、この新しいカスタムをメインページにスローすることができます
:lib
exceptions.ts
<code class="language-typescript">export class AuthRequiredError extends Error { constructor(message = "需要身份验证才能访问此页面") { super(message); this.name = "AuthRequiredError"; } }</code>エラー処理の詳細
AuthRequiredError
最後に、レイアウトとサーバーのエラーについては、いくつかの追加を見てみましょう。 Error
レイアウトのエラー
<code class="language-typescript">export default function Home() { if (!session) throw new AuthRequiredError(); // ... }</code>
エラーはアプリケーションのどこでも(
ファイルだけでなく)発生する可能性があり、next.jsで使用されるファイルルーティングシステムは、ネストされたルーティングとレイアウトで境界がどのように機能するかに影響します。
このエラーバブルの性質は、エラー境界がレイアウトファイルをラップするため、同じセクションのレイアウトファイルのエラーをキャプチャしないことを意味します。 error.tsx
ファイルを使用します。 global-error.tsx
境界はアプリケーション全体をラップしますので、このファイルを使用するときは、独自の一意のglobal-error.tsx
およびタグを追加してください。このエラー境界は、他のネストされた
境界がキャッチされていないエラーをキャッチするため、頻繁にアクティブになりません。
error.tsx
境界に転送します。 error.tsx
next.jsは、アプリルーターと
ファイルコンベンションでこれを非常に簡単にします。 error.tsx
next.jsでのマスタリングエラー処理に関するFAQ routerを使用して
以上がnext.jsアプリルーターでのエラー処理の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。