Catchノードを使う
引き続き共通ノードを掘り続けてみます。今回使うのはCatchノードです。ノードでエラーが発生した場合、基本的にフローは停止しますが、その際に処理を実行するために利用します。DBのロールバックなど後始末が必要な場合に利用するんでしょうね。プログラミングにおけるエラー処理の基本要素かと思います。例によって、サンプルフローを読み込んで動かしてみます。
Catchノードのサンプルフロー
メニューから「読み込み > サンプル > flows > node-red > common > catch > 01 - Catch error」を選択してサンプルフローを読み込みます。Injectノードのボタンを選択してフローを実行すると、msg.errorプロパティにErrorオブジェクトが設定された状態でログ出力されます。
Functionノードを確認すると、以下のようなErrorをthrowしており、これがCatchノードで拾われているようです。
throw new Error("Error Occured!")
Catchノードのプロパティを確認すると、Functionノードのエラーのみcatchするよう設定されています。全ノードのエラーを取得することもできるので、必要に応じて範囲指定すれば良さそうです。
Catchノードが受け取るmsgオブジェクト
Catchノードがエラーを受け取るとmsg.errorには以下のプロパティが含まれます。
- error.message
- error.source.id
- error.source.type
- error.source.name
この他にerror.source.countというプロパティもあるようですが、リファレンスには記載されていませんでした。JavaScriptにある条件付きCatchブロックみたいな機能は無さそうなので、エラーの種類に応じて処理を切り替えたい場合は、msg.errorプロパティの値を見て自分で制御する必要がありそうです。あと、Finallyノードみたいなものはないので、異常系/正常系関係なく処理を実行するならフローを組み立ててなんとかしろってことでしょうか。
まとめ
設定や挙動はシンプルですが、エラー処理には欠かせないノードになりそうです。
コメント
コメントを投稿