見出し画像

The Web Developer Bootcamp 2023 セクション42/61

Expressアプリケーションでエラーを処理することは、堅牢で信頼性の高いWebアプリケーションを構築する上で重要な要素です。この連載では、組み込みのエラー処理、カスタムエラーハンドラ、非同期エラーの処理、Mongooseエラーの処理など、Expressアプリケーションでエラーを処理するさまざまな方法について説明します。

Webアプリケーションのための最小限の意見で構成されたフレームワークであるExpressには、500ステータスコードとスタックトレースを含むHTMLレスポンスを自動的に生成するエラーハンドリングが組み込まれています。しかし、このエラーハンドリングは開発モードでしか機能せず、その機能も限られています。Expressで適切にエラーを処理するためには、ネクストとミドルウェアの概念を理解することが重要です。

Expressでカスタムエラーハンドラを定義するには、関数にエラー、リクエスト、レスポンス、ネクストの4つの引数を指定する必要があります。エラー処理のミドルウェアは、他のすべてのミドルウェア関数の後に、最後に配置する必要があります。app.useを使い、4つのパラメータを持つコールバックを定義することで、カスタムエラーハンドリングミドルウェアを作成することができます。nextにエラーが渡されると、Expressは現在のリクエストをエラーとみなし、エラー処理以外のルーティングやミドルウェア関数をすべてスキップします。

アプリケーションのエラーを処理するためにカスタムエランクラスを定義することは、便利なパターンになります。App Error」と呼ばれるカスタムエラークラスは、JavaScriptのネイティブエラークラスを拡張したもので、メッセージとステータスコードをプロパティとして持っています。Expressのエラーハンドラは、カスタムエラークラスに対して、エラーからステータスコードとメッセージを使用して、ユーザーに応答することができます。エラーハンドラにはカスタマイズの余地があり、異なるテンプレートで応答したり、カスタムヘッダーを追加したりすることができます。

JavaScriptで非同期関数のエラーを処理するのは、複雑で難しい場合があります。非同期関数でエラーを処理するパターンとしては、次の関数を呼び出してエラーを渡すというものがあります。Expressでは、「wrapAsync」という関数を使用することで、非同期関数のエラー処理を簡略化することができます。この関数は、関数を引数として受け取り、新しい関数を返します。元の関数でエラーが発生した場合、新しい関数でそのエラーをキャッチし、"next "に渡します。

コード自体が発生させたエラーは、"next "関数でエラーを出して処理できますが、Mongooseなどの外部ソースから発生したエラーについては、try-catchブロックが必要です。この処理をより管理しやすくするために、エラー処理の処理をヘルパー関数に移すことができます。

Mongoose はさまざまなエラーを投げますが、よくあるのはバリデーションエラーです。特定のタイプの Mongoose エラーをインターセプトして、他のタイプのエラーとは異なる処理をすることで、エラーメッセージをカスタマイズして、カスタムステータスコードでユーザーに返すことができます。このパターンは、他のタイプの Mongoose エラーにも使えます。

以上、Express アプリケーションでのエラー処理は、堅牢で信頼性の高い Web アプリケーションを構築するために不可欠です。組み込みのエラー処理を理解し、カスタムエラーハンドラを作成し、非同期エラーを処理し、Mongooseエラーを処理することで、ユーザーフレンドリーで効率的なアプリケーションを作成することができます。

次のページへ

前のページへ

まとめページへ

「超勇敢なウサギ」へ


この記事が気に入ったらサポートをしてみませんか?