ノード間でメッセージを受け渡すことによってNode-REDのフローは機能します。 メッセージは、プロパティセットを持つことができる単純なJavaScriptオブジェクトです。
メッセージは通常payload
プロパティを持っています。 -
これはほとんどのノードが利用するデフォルトのプロパティです。
Node-REDは_msgid
と呼ばれるプロパティも追加します。-
これはフローの進行状況を辿ることに利用できるメッセージの識別子です。
{
"_msgid": "12345",
"payload": "..."
}
プロパティの値には次のようなJavaScriptの型が有効です。:
true
, false
0
, 123.4
"hello"
[1,2,3,4]
{ "a": 1, "b": 2}
メッセージの構造を理解する最も簡単な方法は、 Debugノードにメッセージを渡し、デバッグサイドバーでそれを確認することです。
デフォルトでは、Debugノードはmsg.payload
プロパティを表示しますが、
任意のプロパティまたはメッセージ全体を表示するように設定することができます。
配列またはオブジェクトを表示するとき、 サイドバーはメッセージの探索がしやすい構造化されたビューを提供します。
msg.payload
が利用されています。Object
、String
、Array
などです。要素にマウスを重ねると、右側にボタンの一覧が現れます。
: 選択した要素へのパスをクリップボードにコピーします。
この例では、payload.Phone[2].type
をコピーします。
これによってChangeノードまたはFunctionノード内で、
プロパティへのアクセスする方法をすぐに特定することができます。
: 要素の値をJSON文字列としてクリップボードへコピーします。 サイドバーでは一定の長さを越えた配列およびバッファが切り捨てられていることに注意してください。 このようなプロパティの値をコピーすると、 切り捨てられた状態でコピーがおこなわれます。
: 選択された要素をピン留めし、いつでも参照できるようにします。 同じDebugノードから他のメッセージを受信したとき、 すべてのピン留めされた要素が自動的に展開されて表示されます。
JSON(JavaScript Object Notation)は JavaScriptオブジェクトを文字列で表現する標準的な手法です。 これはWeb APIでデータを返すために一般的に利用されています。
メッセージプロパティがJSON文字列を含む場合、 メッセージプロパティが持つプロパティにアクセスする前に、まず同値のJavaScriptオブジェクトにパースしなければなりません。 プロパティに文字列とオブジェクトのどちらが含まれるかを判定するには、 Debugノードを利用することができます。
Node-REDは、この変換をおこなうためにJSON
ノードを提供しています。
フローの一般的なタスクは、メッセージをノード間で受け渡す際にメッセージのプロパティを変更することです。
例えば、HTTP Request
の結果は多くのプロパティをもつオブジェクトですが、
そのうちのいくつかだけが必要です。
メッセージの変更には主に2つのノード、 FunctionノードおよびChangeノードがあります。
Functionノードはメッセージに対して任意のJavaScriptコードを実行できるようにします。 このノードによって、メッセージの処理に関して完全な柔軟性が得られますが、 JavaScriptに精通している必要があり、多くの単純な処理の場合には不必要です。 Functionノードの書き方について、さらに多くの情報はこちらで確認できます。
ChangeノードはJavaScriptコードを書く必要なく、多くの機能を提供します。 メッセージプロパティを変更できるだけでなく、 フローコンテキストまたはグローバルコンテキストにアクセスすることも可能です。
このノードは4つの基本的な操作を提供します。:
値の代入
値の置換
値の削除
値の移動
値の代入
操作では、まず設定したいプロパティがどれなのかを決定し、そして保持させたい値を決定します。
この値は文字列や数値のようなハードコーディングされた値、
または他のメッセージまたはフロー/グローバルコンテキストのプロパティを利用することも可能です。
さらに、
新しい値を算出するためにJSONata式言語の利用もサポートされています。
例えば、Debugノードの機能を利用してメッセージプロパティのパスを特定し、
このパスを「対象の値(to)」フィールドに、リストから選択したmsg.
のあとに続くようにそのまま貼り付けることができます。
これによって、msg.payload.Phone[2].type
の値がmsg.payload
に代入されます。
他の例としては、JSONata式を利用し、
msg.payload.temperature
に保持されている気温を華氏から摂氏に変換し、
その結果をmsg.payload.temperature_c
という新しいメッセージプロパティに保管することができます。
{
"payload": {
"temperature": 90,
"temperature_c": 32.22222
}
}
JSONata式は非常にJavaScriptと似通っていますが、いくつか重要な違いがあることに注意してください。
詳細についてはjsonata.orgサイトを参照してください。
メッセージシーケンスは、何らかの方法で関連している順序付けられた一連のメッセージです。
例えば、
Splitノードはpayload
が配列となっている単一のメッセージを、
各メッセージが配列の要素の1つに対応したpayload
を持つようなメッセージシーケンスに変換します。
msg.parts
を理解するメッセージシーケンスの各メッセージはmsg.parts
と呼ばれるプロパティを持っています。
これは、メッセージがどのようにシーケンスに収まっているかという情報を含むオブジェクトです。
次のようなプロパティがあります。:
msg.parts.id
msg.parts.index
msg.parts.count
Note: このparts配列にはシーケンスに関する追加のメタデータが含まれている可能性があります。
例えば、Split
ノードではJoin
ノードによってシーケンスを再構成するために利用できる情報も追加します。
詳しくはSplit
ノードのドキュメントを参照してください。
Coreノードの多くでメッセージシーケンスを利用することができます。
単一のメッセージをメッセージのシーケンスに変換します。
ノードの正確な挙動は、msg.payload
に含まれる型に依存します。:
メッセージのシーケンスを単一のメッセージ変換します。
このノードは3種類の操作を提供します。:
Split
ノードの操作を元に戻そうとします。0.18版で追加
プロパティの値またはJSONata式の結果に基づいてシーケンスを並べ替えます。
0.18版で追加
受信したメッセージから新しいメッセージシーケンスを作成します。
このノードは3種類の操作を提供します。:
msg.topic
プロパティが必要です。
このノードは連結されている順序付けシーケンスを特定するため、
topicの値のリストが設定されています。Node-RED: Low-code programming for event-driven applications.
Copyright OpenJS Foundation and Node-RED contributors. All rights reserved. The OpenJS Foundation has registered trademarks and uses trademarks. For a list of trademarks of the OpenJS Foundation, please see our Trademark Policy and Trademark List. Trademarks and logos not indicated on the list of OpenJS Foundation trademarks are trademarks™ or registered® trademarks of their respective holders. Use of them does not imply any affiliation with or endorsement by them.
The OpenJS Foundation | Terms of Use | Privacy Policy | OpenJS Foundation Bylaws | Trademark Policy | Trademark List | Cookie Policy