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 } }
どのように機能しますか?
シンプルなエラー処理ミドルウェア
カスタム エラー クラスができたので、アプリでこれらのエラーを処理する方法が必要です。ミドルウェアを入力してください:
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 サイトの他の関連記事を参照してください。