Web アプリケーションを構築するとき、物事は常に計画どおりに進むとは限りません。ユーザーが無効な操作を試みたり、データが欠落したり、予期しないバグが発生したりする可能性があります。これらのエラーを適切に処理することは、信頼性の高いアプリケーションを作成し、優れたユーザー エクスペリエンスを提供するために不可欠です。
この投稿では、Node.js アプリケーションにシンプルで効果的なエラー処理システムを実装する方法を説明します。飛び込んでみましょう! ?
エラー処理の基本
JavaScript では、エラーは通常、Error クラスのインスタンスとして表されます。何か問題が発生した場合、エラーを「スロー」することができ、アプリケーションはそれをキャッチしてそれに応じて応答できます。ただし、大規模なアプリケーションでは、基本的な Error クラスだけでエラーを管理すると面倒になる可能性があります。
ここでカスタム エラー クラスが役に立ちます!
カスタムエラークラスの作成
これは、構造化された意味のあるエラーを定義するために使用できる AppError というクラスです。
1 2 3 4 5 6 7 8 9 | export class AppError extends Error {
constructor(name, httpCode, description, isOperational, errors = []) {
super(description);
this.name = name;
this.httpCode = httpCode;
this.isOperational = isOperational;
this.errors = errors;
}
}
|
ログイン後にコピー
どのように機能しますか?
- 名前: ValidationError や NotFoundError などのエラーの種類を説明します。
- httpCode: 適切な HTTP ステータス コード (不正なリクエストの場合は 400、サーバー エラーの場合は 500 など) を設定します。
- 説明: エラーを説明するわかりやすいメッセージを提供します。
- isOperational: エラーが予期されたもの (例: ユーザー入力の問題) か予期せぬもの (例: バグ) かを示すブール値のフラグ。
- エラー: エラーに関するより具体的な詳細を含むオプションのリスト (検証エラーに役立ちます)。
シンプルなエラー処理ミドルウェア
カスタム エラー クラスができたので、アプリでこれらのエラーを処理する方法が必要です。ミドルウェアを入力してください:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | export const errorHandler = (err, req, res, next) => {
if (err instanceof AppError) {
res.status(err.httpCode).json({
success: false,
error: err.name,
message: err.message,
errors: err.errors || [],
});
} else {
console.error( 'Unexpected Error:' , err.stack);
res.status(500).json({
success: false,
error: 'InternalServerError' ,
message: 'Something went wrong. Please try again later.' ,
});
}
};
|
ログイン後にコピー
これは何をしますか?
エラーの種類を確認します:
エラーが AppError のインスタンスである場合、操作エラーとして扱われます。これらは、予期されるエラーです (検証の問題やリソースの不足など)。
AppError ではない場合は、予期しないエラーとして扱われます。これらはコード内のバグ、または計画外のバグである可能性があります。
1 2 3 | 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 クラスは次のように使用できます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | 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!' });
});
app. use (errorHandler);
|
ログイン後にコピー
エラーが発生した場合はどうなりますか?
名前または電子メールが欠落している場合、AppError インスタンスは次の関数に渡されます。
errorHandler ミドルウェアはそれをキャッチし、構造化された JSON 応答を送信します。
1 2 3 4 5 6 7 8 9 | {
"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 サイトの他の関連記事を参照してください。