Node Red 在windows中開發的節點在linux設備中安裝

1 問題

在Node Red開發過程中會有自定義節點的開發,

相關開發的規範可見官方文檔
https://nodered.org/docs/creating-nodes/

在完成節點開發後,代碼目錄大體如下

爲了將節點安裝到Linux設備中,通常通過FTP TFTP SFTP 等協議將升級包放入到設備中,在設備中執行命令行。這種方式對於開發人員來講沒有什麼難度,但對運維人員操作較困難,因此需要找到一種對運維人員友好的方式進行設備升級,這是這篇文檔要解決的。

2 解決思路

設備中裝有NodeRed,可利用NodeRed 的Http節點建立服務器,客戶端(Windows)將文件上傳到設備中,設備接收完文件後,利用Function、exec節點調用sh腳本,實現設備節點升級

3 實施

3.1 window 端

3.1.1 使用NodeJs編寫Http上傳文件程序

核心代碼如下:

引用自
https://www.cnblogs.com/motadou/p/3790018.html

function PostFileToServer(hostIP, sFileName, data, callback) {
    var boundary = "NODEJSPOSTFILE-" + (Math.random() * 9017189554344922).toString(36);

    var sHeader = "--" + boundary + "\r\n";
    sHeader += "Content-Disposition: form-data; name=\"fileName\"; filename=\"" + sFileName + "\"\r\n";
    sHeader += "Content-Type: application/octet-stream\r\n\r\n";

    var sEndData = "\r\n--" + boundary + "--\r\n\r\n";

    var options = {
        hostname: hostIP,
        port: 1880,
        path: '/files',
        method: 'POST',
        headers: {
        }
    };

    var httpreq = http.request(options, function (httpres) {
        httpres.on('data', function (dataResponse) {
            if (dataResponse == "okay") {
                console.log("上傳成功: " + dataResponse + ",請等待系統重啓,重新加載節點");
            }
            else {
                console.log("上傳失敗: " + dataResponse);
            }

            process.stdin.resume();
        });
    });

    httpreq.setHeader('Content-Type', 'multipart/form-data; boundary=' + boundary + '');
    httpreq.setHeader('Content-Length', Buffer.byteLength(sHeader) + data.length + Buffer.byteLength(sEndData));

    httpreq.on('error', function (e) {
        console.log('錯誤problem with request: ' + e.message);
        callback(e);
        return;
    });

    httpreq.write(sHeader);
    httpreq.write(data);
    httpreq.write(sEndData);
    httpreq.end();
}

在完成程序後,調用Js即可完成文件上傳。

3.1.2 js打包成應用程序exe

但沒有安裝Node環境時,無法使用,對此,在網上找到了Js打包程序,分別測試了 《Bat To Exe Converter》(Win10報毒)、PKG(最終使用)、NEXE(報nexe vcbuild.bat nosign release x64 exited with code錯誤,Node版本不支持)等等,最後選擇了PKG

  1. PKG 安裝(網上有大量文檔)

https://github.com/vercel/pkg

  1. PKG 環境下載
    在PKG打包過程中,需要下載fetched-v10.17.0-win-x64等文件,目錄位置在C:\Users\XXXX.pkg-cache\v2.6,如果通過應用程序自身下載,則會因網絡位置斷掉,此時使用手動方式安裝,https://github.com/vercel/pkg-fetch/releases,找到對應的uploaded-v2.6-node-v10.17.0-win-x64,下載到C:\Users\XXXX.pkg-cache\v2.6目錄中,修改名稱則可使用
  2. 打包
    在這裏插入圖片描述
  3. 最終可執行程序
    在這裏插入圖片描述
    在得到打包程序後,Windows端工作基本結束。

3.2 設備端

設備端工作較爲輕鬆,以配置NodeRed爲主

3.2.1 Window向linux設備上傳升級包(Http)

在這裏插入圖片描述

  1. 編輯Http in節點
    在這裏插入圖片描述
  2. 編輯Function函數,這裏有一個小坑,在Function中無法使用require,需要在setting.js中配置,並使用global.get方法在這裏插入圖片描述在這裏插入圖片描述
  3. 編輯exec節點, 在這裏,調用了一個腳本,腳本功能是通過
    在這裏插入圖片描述

3.2.2 設備使用腳本對設備進行升級

installpackage.sh腳本比較簡單如下所示。 在這裏插入圖片描述

這樣,完成了windows中開發的節點在linux設備中的安裝

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