Node-RED: 入門指南
如何開始使用 Node-RED
👋 歡迎來到 Stackhero 文件!
Stackhero 提供即用型的 Node-RED 雲端 解決方案,帶來多項好處,包括:
- 包含 MQTT 伺服器(Mosquitto)。
- 完整訪問 Node-RED 管理界面。
- 包含 Node-RED 儀表板。
- 包含 無限制 和專用的 SMTP 電郵伺服器。
- 只需點擊即可輕鬆進行 更新。
- 使用 HTTPS 保護的 可自訂域名(例如,https://node-red.your-company.com)。
- 由 專用私有 VM 提供的最佳 性能 和強大 安全性。
節省時間 和 簡化您的生活:只需 5 分鐘 即可嘗試 Stackhero 的 Node-RED 雲端託管 解決方案!
如何發送電郵通知
每個 Stackhero 上的 Node-RED 實例都配有專屬的電郵伺服器。這個伺服器讓您可以輕鬆發送無限量的電郵通知。
要從您的 Node-RED 實例開始發送電郵,請在您的流程中添加一個 "email" 節點。您會在節點列表中看到兩個電郵節點。選擇右邊有郵件圖標的那個。添加後,該節點會自動命名為 "Stackhero integrated email server" 並已預先配置。
雙擊電郵節點,並在 "To:" 欄位中輸入您的電郵地址。最好保持其他設置不變。
接下來,將一個 "inject" 節點添加到您的流程中,並將其連接到電郵節點。雙擊 inject 節點(默認名為 "timestamp"),選擇 "string" 作為負載類型,並輸入 "This is an email from Node-RED" 作為負載。
檢查您的節點配置,部署您的流程,然後點擊 inject 節點上的操作圖標。然後檢查您的電郵收件箱以查看從 Node-RED 發送的電郵!
提示:您可以在 "To:" 欄位中用分號分隔每個電郵,以發送給多個收件人。
如何使用 Node.js 原生模組
在 Node-RED 函數中,嘗試直接 require Node.js 原生模組會導致錯誤 ReferenceError: require is not defined。這是因為 Node-RED 不允許您在函數內直接 require Node.js 模組。
為了解決這個問題,這些模組已集成到 Node-RED 的全局上下文中。您可以使用 context.global 訪問它們。
例如,如果您需要 crypto 模組,可以這樣聲明:
const { crypto } = context.global;
以下 Node.js 模組可用:util、buffer、child_process、crypto、fs、os、http、http2、https 和 zlib。
連接到 MySQL 或 MariaDB 資料庫
我們開發了一個節點來連接到 MySQL 伺服器,完全兼容 MySQL 8 的新身份驗證系統 "Caching SHA2 Password",以及 MariaDB。
MySQL/MariaDB 節點
欲了解更多詳情,請訪問官方儲存庫。要在您的 Node-RED 實例上安裝此節點,只需在 Node-RED 儀表板的管理調色板部分搜索 stackhero。
連接到 InfluxDB v2 資料庫
我們提供了一個節點,專為連接到 InfluxDB v2 資料庫而設計。此節點允許您使用 Flux 語言寫入數據和執行查詢。
InfluxDb-v2 節點
更多信息可在官方儲存庫中找到。要將其添加到您的 Node-RED 實例中,請在管理調色板部分搜索 stackhero。
如何捕獲和記錄 Node-RED 節點的錯誤
有時,節點可能會產生錯誤。一個實用的解決方案是設置一個 "catch all debug" 流來監控這些錯誤。
Node-RED 錯誤捕獲流示例
要設置此功能,請添加一個 catch 節點並將其連接到一個 debug 節點。配置 debug 節點以輸出完整的 msg 對象。此設置將每個在流中生成的錯誤記錄到 Node-RED 調試窗口中。
Node-RED 節點錯誤捕獲示例
catch節點僅由同一流中的節點錯誤觸發。如果您使用多個流(或標籤),則需要在每個流中添加catch和debug節點。
在文件系統上存儲數據
Stackhero for Node-RED 提供本地存儲,您的節點可以在其中存儲文件。此存儲位於 /persistent/storage/ 目錄中。
警告 切勿將本地存儲的目的地設置為
/persistent/storage/的子目錄以外的其他位置。 如果您使用其他目錄,則在應用 Node-RED 更新時會丟失數據!
節點配置以存儲本地數據
在此示例中,我們將使用 node-red-node-sqlite 節點。此節點需要一個目錄來存儲其數據。
您需要在 /persistent/storage/ 目錄中定義一個文件,例如 /persistent/storage/myDatabase.sqlite。
Node-RED 上的 SQLite 配置示例
存儲文件
如果您需要本地存儲數據,可以將文件寫入 /persistent/storage/ 目錄。某些 Node-RED 數據可能已存在於此目錄中。為避免衝突,建議使用子目錄,例如 /persistent/storage/myFlowData,來存儲您的文件。
要使用 Node.js 創建此目錄,請在您的節點中運行以下代碼:
fs.mkdirSync('/persistent/storage/myFlowData', { recursive: true });
注意 如果您計劃存儲多於幾個文件,我們建議使用對象存儲伺服器。對象存儲伺服器使得通過 API 管理、共享和訪問文件更容易,例如使用 S3 協議。考慮使用 Stackhero 上的 MinIO 服務,它在短短 2 分鐘內為您提供 S3 兼容的對象存儲伺服器。
使用 HTTP 節點與 iFrame
當使用 iFrame 通過 HTTP 節點請求內容時,默認標頭 X-Frame-Options: SAMEORIGIN 可能會阻止頁面顯示。從 Node-RED 版本 1.2.2-0 開始,您可以覆蓋此默認標頭。
為此,請在您的 HTTP 響應節點上將標頭 X-Frame-Options 設置為 null。例如:
msg.headers = { "X-Frame-Options": null };
設置 X-Frame-Options 標頭的節點示例
您可以下載此流示例並將其導入到您的 Node-RED 實例中以測試此功能。
請注意,您還可以使用標頭 Content-Security-Policy: frame-ancestors <source> 或 X-Frame-Options: ALLOW-FROM <source> 限制允許的域。
安全模式:解決 Node-RED 流錯誤(502 錯誤)
如果您在訪問管理儀表板時遇到 502 錯誤,請首先檢查您的實例日誌。您可以在 Stackhero 儀表板的 "Logs" 標籤下找到這些日誌,選擇您的 Node-RED 服務後。
日誌可能包含阻止 Node-RED 正確啟動的錯誤。收集盡可能多的信息以幫助調試您的流。
查看日誌後,請轉到 Stackhero 儀表板中的服務配置並啟用 "安全模式" 選項。在安全模式下,Node-RED 將重新啟動而不會自動啟動您的流。
這樣您就可以訪問管理儀表板,修復您的流錯誤並部署您的更改。一旦一切正常運行,請記得在服務配置中禁用安全模式,以便您的流在 Node-RED 重啟時自動啟動。
調色板管理器中的節點版本比 NPM 上的舊
如果您嘗試使用調色板管理器安裝節點,但注意到版本比 NPM 上的舊,這可能意味著節點的創建者尚未在 Node-RED 網站上更新版本。
以前,節點版本會自動更新以反映在 NPM 上發布的版本。現在不再是這樣。
好消息是,您可以提示 Node-RED 網站刷新版本。只需訪問 https://flows.nodered.org/add/node,輸入 NPM 模組名稱(例如,node-red-contrib-xxx),然後點擊 "Add" 按鈕。完成後,返回您的 Node-RED 儀表板並打開調色板管理器。更新的版本現在應該可見並準備好安裝。
處理錯誤 "SSL routines:ssl3_get_record:wrong version number:../deps/openssl/openssl/ssl/record/ssl3_record.c"
如果您在發送電郵時看到此錯誤,這可能是因為您在電郵節點配置中選擇了 "Use secure connection" 選項。
由於 Stackhero 電郵伺服器和 Node-RED 伺服器運行在同一實例上,它們本地通信,因此您不需要使用 TLS(SSL)加密。啟用安全連接選項會導致 Node-RED 使用 TLS 與電郵伺服器通信,從而導致 SSL 錯誤 "wrong version number"。
請注意,如果接收伺服器支持加密,電郵將自動使用 TLS 加密。這已為您預先配置。