検索
ホームページウェブフロントエンドjsチュートリアルNode.js でのシンプルで効果的なエラー処理システムの構築

Building a Simple and Effective Error-Handling System in Node.js

Web アプリケーションを構築するとき、物事は常に計画どおりに進むとは限りません。ユーザーが無効な操作を試みたり、データが欠落したり、予期しないバグが発生したりする可能性があります。これらのエラーを適切に処理することは、信頼性の高いアプリケーションを作成し、優れたユーザー エクスペリエンスを提供するために不可欠です。

この投稿では、Node.js アプリケーションにシンプルで効果的なエラー処理システムを実装する方法を説明します。飛び込んでみましょう! ?

エラー処理の基本

JavaScript では、エラーは通常、Error クラスのインスタンスとして表されます。何か問題が発生した場合、エラーを「スロー」することができ、アプリケーションはそれをキャッチしてそれに応じて応答できます。ただし、大規模なアプリケーションでは、基本的な Error クラスだけでエラーを管理すると面倒になる可能性があります。

ここでカスタム エラー クラスが役に立ちます!
カスタムエラークラスの作成

これは、構造化された意味のあるエラーを定義するために使用できる AppError というクラスです。

export class AppError extends Error {
    constructor(name, httpCode, description, isOperational, errors = []) {
        super(description); // Call the parent class (Error) constructor
        this.name = name; // Name of the error (e.g., ValidationError)
        this.httpCode = httpCode; // HTTP status code (e.g., 400, 404, 500)
        this.isOperational = isOperational; // Flag to distinguish between operational and system errors
        this.errors = errors; // Optional array of detailed error messages
    }
}

どのように機能しますか?

  • 名前: ValidationError や NotFoundError などのエラーの種類を説明します。
  • httpCode: 適切な HTTP ステータス コード (不正なリクエストの場合は 400、サーバー エラーの場合は 500 など) を設定します。
  • 説明: エラーを説明するわかりやすいメッセージを提供します。
  • isOperational: エラーが予期されたもの (例: ユーザー入力の問題) か予期せぬもの (例: バグ) かを示すブール値のフラグ。
  • エラー: エラーに関するより具体的な詳細を含むオプションのリスト (検証エラーに役立ちます)。

シンプルなエラー処理ミドルウェア

カスタム エラー クラスができたので、アプリでこれらのエラーを処理する方法が必要です。ミドルウェアを入力してください:

export const errorHandler = (err, req, res, next) => {
    if (err instanceof AppError) {
        // Handle operational errors
        res.status(err.httpCode).json({
            success: false,
            error: err.name,
            message: err.message,
            errors: err.errors || [],
        });
    } else {
        // Handle unexpected errors
        console.error('Unexpected Error:', err.stack); // Log the stack trace for debugging
        res.status(500).json({
            success: false,
            error: 'InternalServerError',
            message: 'Something went wrong. Please try again later.',
        });
    }
};

これは何をしますか?
エラーの種類を確認します:
エラーが AppError のインスタンスである場合、操作エラーとして扱われます。これらは、予期されるエラーです (検証の問題やリソースの不足など)。
AppError ではない場合は、予期しないエラーとして扱われます。これらはコード内のバグ、または計画外のバグである可能性があります。

Responds with the right status code and message:
    For AppError instances, it sends a structured JSON response containing the error details.
    For unexpected errors, it sends a generic 500 response to the user and logs the details for debugging.

すべてをまとめる

Express アプリにユーザーがフォームを送信するルートがあるが、一部のフィールドが欠落していると想像してください。 AppError クラスは次のように使用できます。

app.post('/submit-form', (req, res, next) => {
    const { name, email } = req.body;

    if (!name || !email) {
        const errors = [];
        if (!name) errors.push({ field: 'name', message: 'Name is required.' });
        if (!email) errors.push({ field: 'email', message: 'Email is required.' });

        return next(new AppError('ValidationError', 400, 'Invalid input data.', true, errors));
    }

    res.json({ success: true, message: 'Form submitted successfully!' });
});

// Register the error-handling middleware
app.use(errorHandler);

エラーが発生した場合はどうなりますか?
名前または電子メールが欠落している場合、AppError インスタンスは次の関数に渡されます。
errorHandler ミドルウェアはそれをキャッチし、構造化された JSON 応答を送信します。

{
    "success": false,
    "error": "ValidationError",
    "message": "Invalid input data.",
    "errors": [
        { "field": "name", "message": "Name is required." },
        { "field": "email", "message": "Email is required." }
    ]
}

このパターンを使用する理由

  • 明確さ: カスタム エラー クラスにより、エラーがよりわかりやすくなり、デバッグが容易になります。
  • 一貫性: すべてのエラーは予測可能な構造に従っており、フロントエンド開発者が扱いやすくなります。
  • 懸念の分離: ルート ハンドラーはロジックに重点を置き、ミドルウェアはエラー応答を処理します。

結論
エラー処理は複雑である必要はありません。カスタム エラー クラスとミドルウェアを使用すると、アプリの信頼性とユーザーの満足度を維持する、堅牢で初心者に優しいシステムを構築できます。

このアプローチについてどう思いますか? Node.js でエラーを処理するためのヒントやコツはありますか?以下のコメント欄でお知らせください。

以上がNode.js でのシンプルで効果的なエラー処理システムの構築の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
JavaScriptの文字列文字を交換しますJavaScriptの文字列文字を交換しますMar 11, 2025 am 12:07 AM

JavaScript文字列置換法とFAQの詳細な説明 この記事では、javaScriptの文字列文字を置き換える2つの方法について説明します:内部JavaScriptコードとWebページの内部HTML。 JavaScriptコード内の文字列を交換します 最も直接的な方法は、置換()メソッドを使用することです。 str = str.replace( "find"、 "置換"); この方法は、最初の一致のみを置き換えます。すべての一致を置き換えるには、正規表現を使用して、グローバルフラグGを追加します。 str = str.replace(/fi

8見事なjQueryページレイアウトプラグイン8見事なjQueryページレイアウトプラグインMar 06, 2025 am 12:48 AM

楽なWebページレイアウトのためにjQueryを活用する:8本質的なプラグイン jQueryは、Webページのレイアウトを大幅に簡素化します。 この記事では、プロセスを合理化する8つの強力なjQueryプラグイン、特に手動のウェブサイトの作成に役立ちます

独自のAjax Webアプリケーションを構築します独自のAjax Webアプリケーションを構築しますMar 09, 2025 am 12:11 AM

それで、あなたはここで、Ajaxと呼ばれるこのことについてすべてを学ぶ準備ができています。しかし、それは正確には何ですか? Ajaxという用語は、動的でインタラクティブなWebコンテンツを作成するために使用されるテクノロジーのゆるいグループ化を指します。 Ajaxという用語は、もともとJesse Jによって造られました

独自のJavaScriptライブラリを作成および公開するにはどうすればよいですか?独自のJavaScriptライブラリを作成および公開するにはどうすればよいですか?Mar 18, 2025 pm 03:12 PM

記事では、JavaScriptライブラリの作成、公開、および維持について説明し、計画、開発、テスト、ドキュメント、およびプロモーション戦略に焦点を当てています。

Ajaxを使用して動的にボックスコンテンツをロードしますAjaxを使用して動的にボックスコンテンツをロードしますMar 06, 2025 am 01:07 AM

このチュートリアルでは、Ajaxを介してロードされた動的なページボックスの作成を示しており、フルページのリロードなしでインスタントリフレッシュを可能にします。 JQueryとJavaScriptを活用します。カスタムのFacebookスタイルのコンテンツボックスローダーと考えてください。 重要な概念: ajaxとjquery

10 jQueryの楽しみとゲームプラグイン10 jQueryの楽しみとゲームプラグインMar 08, 2025 am 12:42 AM

10の楽しいjQueryゲームプラグインして、あなたのウェブサイトをより魅力的にし、ユーザーの粘着性を高めます! Flashは依然としてカジュアルなWebゲームを開発するのに最適なソフトウェアですが、jQueryは驚くべき効果を生み出すこともできます。また、純粋なアクションフラッシュゲームに匹敵するものではありませんが、場合によってはブラウザで予期せぬ楽しみもできます。 jquery tic toeゲーム ゲームプログラミングの「Hello World」には、JQueryバージョンがあります。 ソースコード jQueryクレイジーワードコンポジションゲーム これは空白のゲームであり、単語の文脈を知らないために奇妙な結果を生み出すことができます。 ソースコード jquery鉱山の掃引ゲーム

JavaScript用のクッキーレスセッションライブラリを作成する方法JavaScript用のクッキーレスセッションライブラリを作成する方法Mar 06, 2025 am 01:18 AM

このJavaScriptライブラリは、Cookieに依存せずにセッションデータを管理するためにWindow.nameプロパティを活用します。 ブラウザ全体でセッション変数を保存および取得するための堅牢なソリューションを提供します。 ライブラリは、セッションの3つのコア方法を提供します

jQuery Parallaxチュートリアル - アニメーションヘッダーの背景jQuery Parallaxチュートリアル - アニメーションヘッダーの背景Mar 08, 2025 am 12:39 AM

このチュートリアルでは、jQueryを使用して魅惑的な視差の背景効果を作成する方法を示しています。 見事な視覚的な深さを作成するレイヤー画像を備えたヘッダーバナーを構築します。 更新されたプラグインは、jQuery 1.6.4以降で動作します。 ダウンロードしてください

See all articles

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

EditPlus 中国語クラック版

EditPlus 中国語クラック版

サイズが小さく、構文の強調表示、コード プロンプト機能はサポートされていません

SublimeText3 英語版

SublimeText3 英語版

推奨: Win バージョン、コードプロンプトをサポート!

MinGW - Minimalist GNU for Windows

MinGW - Minimalist GNU for Windows

このプロジェクトは osdn.net/projects/mingw に移行中です。引き続きそこでフォローしていただけます。 MinGW: GNU Compiler Collection (GCC) のネイティブ Windows ポートであり、ネイティブ Windows アプリケーションを構築するための自由に配布可能なインポート ライブラリとヘッダー ファイルであり、C99 機能をサポートする MSVC ランタイムの拡張機能が含まれています。すべての MinGW ソフトウェアは 64 ビット Windows プラットフォームで実行できます。

SublimeText3 Linux 新バージョン

SublimeText3 Linux 新バージョン

SublimeText3 Linux 最新バージョン

SAP NetWeaver Server Adapter for Eclipse

SAP NetWeaver Server Adapter for Eclipse

Eclipse を SAP NetWeaver アプリケーション サーバーと統合します。