建立你的第一個節點 Creating Your First Node

當流程被部署到 Node-RED 上,就會建立節點。節點在 Node-RED 執行間會接受或傳送訊息(Message)。而當新的流程被部屬,這些節點就會被刪除。

這一段簡單說明了節點的生命週期

而一個節點主要由兩個檔案組成

  • Javascript 檔案(.js)
    • 定義節點做什麼
  • HTML 檔案(.html)
    • 定義節點的屬性與在 Node-RED 編輯器當中的視窗與幫助訊息

最後包裝成 npm 模組時,另外需要 package.json

建立一個簡單的節點 Creating a simple node

接下來會實作一個節點,並且可以安裝在 Node-RED 上

這個範例節點能夠將訊息的內容(message.payloads)轉換成英文小寫。 建立一個目錄,並建立以下檔案

  • package.json
  • lower-case.js
  • lower-case.html

package.json

這是用來描述 node.js 模組內容的標準文件

可以使用 npm init 來產生標準的 package.json。該指令會詢問一連串的問題來找尋合理的預設值,當詢問到模組的名稱時 name:<預設值> 輸入範例名稱 node-red-contrib-example-lower-case

當建立好,需要自己加入 node-red 屬性

{
    "name" : "node-red-contrib-example-lower-case",
    ...
    "node-red" : {
        "nodes": {
            "lower-case": "lower-case.js"
        }
    } 
}

這告知了 Node-RED 在執行的時候,這個模組有多少節點

而更多關於節點如何包裝成模組,請參考 模組包裝教學 packaging guide

注意:不要把這個範例模組丟到 npm 上

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);
}

這個 module.exports 會在 Node-RED 載入節點時呼叫,而唯一的參數 RED 是提供給這個函數去使用 Node-RED 的執行時期 API

節點藉由函數(function)來定義自己。當產生這個範例節點的實際物件(instance)時,會呼叫 LowerCaseNode 函數。並且傳遞物件,裡面有在編輯器設定的節點屬性

之後呼叫 RED.nodes.createNode 來初始化所有節點的功能,接下來就是這個節點特定的功能

在這個範例,節點監聽 input 事件,當有訊息傳到這個節點,就將訊息內容(payload)轉成英文小寫。然後使用 send 將訊息送到流程中的下一個節點

最後,將這個函數 LowerCaseNode 用節點名稱 lower-case 註冊到 Node-RED 中

如果節點中有依賴到額外的模組,就必須包含在 package.json 當中的 dependencies

更多關於節點運行的資訊,請看 節點的 JavaScript 檔案

lower-case.html

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

<script type="text/x-red" 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/x-red" data-help-name="lower-case">
    <p>A simple node that converts the message payloads into all lower-case characters</p>
</script>

節點的 HTML 檔案需要提供以下內容

  • 在編輯器註冊的節點定義
  • 編輯區域的範本
  • 幫助文件

在這個範例當中,只有一個 name 屬性。雖然沒有用到這屬性,但通常用來辨別在一個流程當中特定的節點。

有關更多網頁編輯器內容設定,請看 節點的 HTML 檔案

測試你的節點 Testing your node in Node-RED

一旦建立好前面所描述的基本節點模組,就可以安裝到自己的 Node-RED 上

想要在本地端測試節點的話,可以使用 npm link。就像使用 npm 安裝一樣,只不過只能將本地的模組安裝到本地的 Node-RED

  • 在包含節點 package.json 這個檔案的目錄中,直接執行 sudo npm link
  • 在 Node-RED 的目錄中,通常在 ~/.node-red,直接執行 npm link <模組的名稱>

這指令會在兩個目錄之間建立符號連接,讓 Node-RED 在執行時,能夠正確發現節點模組並載入 如果有改動節點模組的任何檔案,Node-RED 需要重新啟動會重新載入改動後的節點模組

results matching ""

    No results matching ""