建立你的第一個節點 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"></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 需要重新啟動會重新載入改動後的節點模組