Node.js でのカスタム エラー タイプの分析
この記事では、Node.js でのエラーの種類をカスタマイズする方法について詳しく説明します。Node.js を学習または使用する際に参考にしてください。
はじめに
一般的に、デバッグプロセス中にアプリケーションによって生成されたエラーに対処する方法を考慮する人はほとんどいません。単純に console.log('error')
を使用します。基本的にはエラーを見つけるのに十分です。このデバッグ情報を残しておくと、将来のデバッグ プロセスで大幅に時間を節約でき、保守性が向上します。したがって、エラーメッセージは非常に重要です。同時に、悪い使い方も生じます。カスタム エラー タイプは最近のプロジェクトで使用されており、それらについてさらに学ぶ必要があると感じたので、私自身と必要な他のすべての人が必要なときに簡単に参照できるようにこの記事を書きました。 console.log(‘error')
定位错误,基本够用了,通过留下这些调试信息,能够为我们以后的调试过程中升了不少时间,提高了维护性。所以错误提示非常重要。同时,也会带来一些比较糟糕用法。最近的项目里就用到了自定义错误类型,觉得有必要深入了解一下,所以就写了这篇文章,方便自己和有需要的大家在需要的时候查阅。
Subclassing Error
首先我们可以定义一个 Error 的子类。通过 Object.create
和 util.inherits
很容易实现:
var assert = require('assert'); var util = require('util'); function NotFound(msg){ Error.call(this); this.message = msg; } util.inherits(NotFound, Error); var error = new NotFound('not found'); assert(error.message); assert(error instanceof NotFound); assert(error instanceof Error); assert.equal(error instanceof RangeError, false);
可以通过 instanceof
来检查错误类型,根据类型进行不同的处理。
上面的代码设置了自带的message
, 并且 error
是 NotFound
和 Error
的一个实例, 但是不是 RangeError
。
如果用了 express
框架, 就能设置其他的 properties
让 error
变得更有用。
比方说当处理一个HTTP的错误时, 就可以写成这样:
function NotFound(msg) { Error.call(this); this.message = msg; this.statusCode = 404; }
现在就已经可以通过错误处理的中间件来处理错误信息:
app.use(function(err, req, res, next) { console.error(err.stack); if (!err.statusCode || err.statusCode === 500) { emails.error({ err: err, req: req }); } res.send(err.statusCode || 500, err.message); });
这会发送HTTP的状态码给浏览器, 当 err
的 statusCode
未设置或者等于 500 的时候, 就通过邮件来发送这个错误。这样就能排除那些 404, 401, 403等等的错误。
读取 console.error(err.stack)
事实上并不会像预期那样工作,像 node, chrome 基于 V8 的可以使用 Error.captureStackTrace(this, arguments.callee)
まず、Error のサブクラスを定義できます。 Object.create
と util.inherits
を使用すると簡単に実現できます:
var NotFound = function(msg) { Error.call(this); Error.captureStackTrace(this, arguments.callee); this.message = msg || 'Not Found'; this.statusCode = 404; this.name = "notFound" } util.inherits(NotFound, Error); export.NotFoundError = NotFound;
instanceof
で確認できます。種類に応じて処理方法が異なります。 上記のコードは組み込みの message
を設定しており、 error
は NotFound
と Error
のインスタンスです。ただし、RangeError
ではありません。 express
フレームワークを使用する場合は、他の プロパティ
を設定して error
をさらに便利にすることができます。 たとえば、HTTP エラーを処理する場合、次のように記述できます:
これで、エラー処理ミドルウェアを通じてエラー メッセージを処理できるようになります: これ 以上がNode.js でのカスタム エラー タイプの分析の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。var notFountError = require('./error').NotFountError;
var UserNotFound = function(msg){
this.constructor.super_(msg);
}
util.inherits(UserNotFound, notFoundError);
err
の statusCode
が設定されていない場合、または 500 に等しい場合、エラーは電子メールで送信されます。これにより、404、401、403 などのエラーが排除されます。 console.error(err.stack)
の読み取りは実際には期待どおりに機能しません。ノードと同様、V8 ベースの Chrome では Error.captureStackTrace(this, argument.callee )
を使用できます。 > のスタック トレースのエラー コンストラクター。

ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

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

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック











ミドルウェアを使用して Go 関数のエラー処理を改善する: 関数呼び出しをインターセプトして特定のロジックを実行できるミドルウェアの概念を紹介します。カスタム関数でエラー処理ロジックをラップするエラー処理ミドルウェアを作成します。ミドルウェアを使用してハンドラー関数をラップし、関数が呼び出される前にエラー処理ロジックが実行されるようにします。エラーの種類に基づいて適切なエラー コードを返します。 едоточитьсянаобработкеозибо

ピン張りのノードの詳細な説明とインストールガイドこの記事では、ピネットワークのエコシステムを詳細に紹介します - PIノードは、ピン系生態系における重要な役割であり、設置と構成の完全な手順を提供します。 Pinetworkブロックチェーンテストネットワークの発売後、PIノードは多くの先駆者の重要な部分になり、テストに積極的に参加し、今後のメインネットワークリリースの準備をしています。まだピン張りのものがわからない場合は、ピコインとは何かを参照してください。リストの価格はいくらですか? PIの使用、マイニング、セキュリティ分析。パインワークとは何ですか?ピン競技プロジェクトは2019年に開始され、独占的な暗号通貨PIコインを所有しています。このプロジェクトは、誰もが参加できるものを作成することを目指しています

C++ では、例外処理は try-catch ブロックを通じてエラーを適切に処理します。一般的な例外の種類には、実行時エラー、論理エラー、範囲外エラーが含まれます。ファイルを開くエラー処理を例に挙げます。プログラムがファイルを開くのに失敗すると、例外がスローされ、エラー メッセージが出力され、catch ブロックを通じてエラー コードが返されます。これにより、プログラムを終了せずにエラーが処理されます。例外処理には、エラー処理の集中化、エラーの伝播、コードの堅牢性などの利点があります。

C++ クラス設計におけるエラー処理とログ記録には、次のものが含まれます。 例外処理: カスタム例外クラスを使用して例外をキャッチして処理し、特定のエラー情報を提供します。エラー コード: 整数または列挙を使用してエラー状態を表し、戻り値で返します。アサーション: 事前条件と事後条件を確認し、条件が満たされない場合は例外をスローします。 C++ ライブラリのロギング: std::cerr および std::clog を使用した基本的なロギング。外部ログ ライブラリ: レベル フィルタリングやログ ファイル ローテーションなどの高度な機能を提供するサードパーティ ライブラリを統合します。カスタム ログ クラス: 独自のログ クラスを作成し、基礎となるメカニズムを抽象化し、さまざまなレベルの情報を記録するための共通インターフェイスを提供します。

PHP の最適なエラー処理ツールとライブラリには次のものがあります。 組み込みメソッド: set_error_handler() および error_get_last() サードパーティ ツールキット: Whoops (デバッグとエラーのフォーマット) サードパーティのサービス: Sentry (エラーの報告と監視) サードパーティライブラリ: PHP-error-handler (カスタム エラー ログおよびスタック トレース) および Monolog (エラー ログ ハンドラー)

GoLang 関数は、エラー パッケージの Wrapf 関数と Errorf 関数を通じてエラーの国際化を実行できます。これにより、ローカライズされたエラー メッセージを作成し、それを他のエラーに追加して、より高レベルのエラーを形成します。 Wrapf 関数を使用すると、低レベルのエラーを国際化して、「ファイル %s を開くときにエラーが発生しました」などのカスタム メッセージを追加できます。

Go でのエラー処理のベスト プラクティスには、エラー タイプの使用、常にエラーを返す、エラーのチェック、複数値の戻り値の使用、センチネル エラーの使用、およびエラー ラッパーの使用が含まれます。実用的な例: HTTP リクエスト ハンドラーで、ReadDataFromDatabase がエラーを返した場合は、500 エラー応答を返します。

Go 関数の単体テストでは、エラー処理に 2 つの主な戦略があります。1. エラーをエラー タイプの特定の値として表現し、期待値をアサートするために使用します。2. チャネルを使用してエラーをテスト関数に渡します。これは、同時実行コードのテストに適しています。実際のケースでは、関数が負の入力に対して 0 を返すようにするために、エラー値戦略が使用されます。
