Node-RED使用指南:22:定製化Node的使用方法

在這裏插入圖片描述
Node-RED提供了很多Node,這篇文章介紹一下定製化Node的使用方法。

事前準備

以容器方式啓動Node-RED服務,啓動命令如下所示:

啓動命令:docker run -it -p 1880:1880 -v $PWD/data:/data -e TZ=Asia/Shanghai --name nodered -d nodered/node-red:1.0.4

在這裏插入圖片描述

定製化Node的使用方式

定製化Node相關的文件主要有如下相關:

  • HTML文件:Node的種類說明以及顯示相關的信息 (必須)
  • JS文件:Node的功能實現 (必須)
  • package.json:因爲Node-RED仍然是使用npm進行包的管理,需要符合相應的規範 (可選)

部署方式

最簡單的方式莫過於直接將相應的HTML文件和JS文件直接放入如下目錄或者其子目錄中:

  • 放置目錄:node-red/node_modules/@node-red/nodes/

也可以將自己的組件使用npm進行打包,然後在node-red中進行安裝,本文中將直接使用最簡單的方式進行驗證和說明。

事前準備

Node示例:使用一個可以進行小寫轉化的定製化Node示例,這是Node-RED的一個官方示例,基本不做改動,只是爲了結果顯示清晰,將其種類從function設定爲common,這樣截圖對比的時候不用拖動了。

HTML文件內容

liumiaocn:common liumiao$ cat 10-lower-case.html 
<script type="text/javascript">
    RED.nodes.registerType('lower-case',{
        category: 'common',
        color: '#a6bbcf',
        defaults: {
            name: {value:""}
        },
        inputs:1,
        outputs:1,
        icon: "file.png",
        label: function() {
            return this.name||"lower-case";
        }
    });
</script>

<script type="text/html" data-template-name="lower-case">
    <div class="form-row">
        <label for="node-input-name"><i class="icon-tag"></i> Name</label>
        <input type="text" id="node-input-name" placeholder="Name">
    </div>
</script>

<script type="text/html" data-help-name="lower-case">
    <p>A simple node that converts the message payloads into all lower-case characters</p>
</script>
liumiaocn:common liumiao$

代碼說明:上述內容完全使用官方內容,只是將category的類別從function改爲了common。注意名稱命令是爲了排序。

JS文件內容

liumiaocn:common liumiao$ cat 10-lower-case.js
module.exports = function(RED) {
    function LowerCaseNode(config) {
        RED.nodes.createNode(this,config);
        var node = this;
        node.on('input', function(msg) {
            msg.payload = msg.payload.toLowerCase();
            node.send(msg);
        });
    }
    RED.nodes.registerType("lower-case",LowerCaseNode);
}
liumiaocn:common liumiao$ 

代碼說明:整個功能只有msg.payload.toLowerCase();是最爲主要的,可以看到是將payload的結果直接使用toLowerCase函數進行轉化,所以當payload不是string類型或者爲空時可能會出錯,請注意這只是一個官方示例用於進行定製化Node執行的說明示例。

部署定製化Node

本文示例中將上述名爲lower-case的Node放至common種類中,首先進入到Node-RED的容器中:

liumiaocn:~ liumiao$ docker exec -it nodered sh
~ $ cd ~/node_modules/@node-red/nodes/core/common
~/node_modules/@node-red/nodes/core/common $ ls
20-inject.html    21-debug.js       25-catch.html     25-status.js      90-comment.html   98-unknown.js
20-inject.js      24-complete.html  25-catch.js       60-link.html      90-comment.js     lib
21-debug.html     24-complete.js    25-status.html    60-link.js        98-unknown.html
~/node_modules/@node-red/nodes/core/common $

可以看到其在頁面上的顯示順序主要是靠前面的兩位數字,所以這裏我們也如法炮製,將事前準備的內容放置於此:

~/node_modules/@node-red/nodes/core/common $ vi 10-lower-case.html
~/node_modules/@node-red/nodes/core/common $ vi 10-lower-case.js
~/node_modules/@node-red/nodes/core/common $ ls
10-lower-case.html  20-inject.js        24-complete.html    25-catch.js         60-link.html        90-comment.js       lib
10-lower-case.js    21-debug.html       24-complete.js      25-status.html      60-link.js          98-unknown.html
20-inject.html      21-debug.js         25-catch.html       25-status.js        90-comment.html     98-unknown.js
~/node_modules/@node-red/nodes/core/common $ 

這樣部署已經完成,接下來就可以重啓並確認結果了

結果確認

  • 重啓Node-RED容器
~/node_modules/@node-red/nodes/core/common $ exit
liumiaocn:~ liumiao$ docker restart nodered
nodered
liumiaocn:~ liumiao$ 
  • 結果確認
    可以在左側的common類別中的第一個即可看到我們新加的名稱爲lower case的Node了
    在這裏插入圖片描述

Node功能確認

根據代碼我們知道,這個Node實現的功能就是toLowerCase,我們創建一個flow來進行功能確認。
在這裏插入圖片描述
缺省方式創建如下三個節點並進行連接和部署,執行結果如下所示
在這裏插入圖片描述
原因是因爲Input的數據的類型,這個Node提供的功能就是需要其payload後可以使用toLowerCase函數,這裏我們將其改爲string即可
在這裏插入圖片描述
重新部署再次執行,可以看到正常動作
在這裏插入圖片描述
但是小寫轉化的功能並沒有確認,改一下字符串的內容
在這裏插入圖片描述
重新部署再次執行,就可以看到被轉化爲小寫字符的輸出結果了
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章