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ノードみたいなものはないので、異常系/正常系関係なく処理を実行するならフローを組み立ててなんとかしろってことでしょうか。

まとめ

設定や挙動はシンプルですが、エラー処理には欠かせないノードになりそうです。

コメント

このブログの人気の投稿

Execノードを使う

SendGridのX-SMTPAPIヘッダの使い方(Section Tags、Substitution Tags編)

Joinノードを使う(その4)