前回はfunctionノードの中で、require(‘os’)的な操作をする方法を練習。これでNode-REDの中から node.js の各種パッケージが使えるようになり嬉しいです。でも「出来合い」のモジュールだけじゃあな。自前のも使いたい、ということで今回は自前モジュールも同じ方法で使えることを確かめました。
※「ブロックを積みながら」投稿順 index はこちら
※Node-REDのfunctionノード内での追加モジュールのロードの方法については、以下の解説ページに書かれています。
実験に使った「自前」のモジュール
今回Node-REDから呼び出した自前のモジュールは以下の2行だけの簡単なものです。千里の道も2行から、違うか。
// test module exports.abc = 'ABC'; exports.inc = function(a) { return a+1; }
これは普通のJavaScriptコードなので、Node-REDつかわずエディタで書いてます。今回はVScode使用なので、上記のモジュールのテスト用コードも書いて、node.js で動作することを確認してあります(冒頭のアイキャッチ画像。)
「自前」モジュールの呼び出し設定
上記モジュールを require()するために ~/.node-red/settings.js 内に1行追加いたします。前回、 os:requreの行のコメントを外したところの直下に1行追加いたしました。モジュールの在り処はフルパスで指定しとります。
変更後、node-red-restart かけてます。
今回実験のフロー
今回実験のフローは外形的には前回と同じです。真ん中の functionノードのコードを差し替えただけです。functionノードでやることは2つ。
-
- 到来するmsgに載っているpayloadをモジュール内のinc()使ってインクリメント
- topicプロパティにモジュール内のabcプロパティの値を載せる
functionノードの設定が以下に。global.get(‘tst’)すると、requre()相当の処理がされてモジュールが使えるようになると。
実行結果
今回は「以下同文」の回でチョロすぎ。流してんじゃねーよ。連休だし。