如果物聯網應用開發(IoT Studio)平臺提供的節點不能滿足您的需求,您可以使用Node.js腳本節點,編寫JavaScript代碼來靈活定制功能邏輯。目前支持Node v6.10版本。

編碼說明

在業務邏輯編輯頁面的節點中,選擇對應功能節點配置業務流,Node.js腳本配置頁面如下圖所示。

Node.js腳本
  • 使用動態參數。

    在腳本中,可使用平臺已內置的以下節點變量,調用需要的數據:

    • payload,來自上個節點的輸出數據。通過payload.對象中的某個key來訪問指定key的數據。

      例如payload.productKey:調用上一個節點輸出內容{productKey: '值'}中的值。

    • query,來自輸入節點的數據。例如,HTTP請求節點的入參,設備觸發節點的設備數據。通過query.參數名來訪問指定數據。

      例如query.deviceName:調用API請求節點中入參deviceName的值。

    • node,來自指定節點(node.節點ID)的輸出數據。通過node.節點ID.節點輸出對象中的某個key來訪問指定key的數據。

      例如node.node_39***0.pageNum:調用節點node_39***0輸出中pageNum的值。

    如果需要調用某參數的子集,可按如下示例方式調用:

    • 使用payload.props.PM10.value,調用上一個節點props對象中屬性PM10的值。
    • 使用query.deviceContext.deviceName,調用第一個節點的輸出中deviceContext對象的deviceName變量。
  • 日志輸出。

    可以使用console.log輸出日志。可以在調試信息中查看日志數據。使用示例如下。

    let name = 'Jack';
    console.log('Hello', name);

約束與限制

項目 說明
Date 服務編排最終會運行在阿里云函數計算(Function Compute)上。函數計算使用的是UTC時間,因此使用Date對象時,請注意當前時區和UTC時間的差異。
NPM庫

腳本節點中已經內置了一些NPM庫,可以直接require調用。系統內置庫:aliyun-api-gateway、axios、lodash、moment、和uuid。

您也可以安裝第三方庫:在擴展庫管理中,搜索支持的NPM庫模塊,然后單擊安裝。使用require方式引入模塊。NPM庫具體使用指南,請參見本文章節:使用外部擴展庫。

變量 變量必須符合ECMAScript2015嚴格模式下變量的命名規范。

請勿在腳本中定義使用包含循環引用的變量。

不能使用以下關鍵詞命名變量:

abstract、boolean、break、 byte、case、catch、char、class、continue、const、debugger、default、delete、do、double、else、enum、export、extends、false、finally、for、function、goto、if、import、implements、in、instance、of、int、interface、let、 long、native、new、null、package、private、protected、public、return、short、static、super、switch、synchronized、this、throw、throws、transient、try、type of、var、void、volatile、while、with、yield

使用外部擴展庫

使用Node.js腳本節點編寫代碼過程中,除了可以使用節點中已內置了NPM庫,您還可以安裝支持的外部NPM庫。

  1. 在節點配置下,單擊擴展庫管理擴展庫管理
  2. 搜索您需要的外部庫,單擊其對應的安裝按鈕。

    擴展庫安裝完成后,將展示在已安裝庫列表中。

  3. 在編寫代碼時,通過require方式使用擴展庫。使用擴展庫

代碼示例

/**
 * @param {Object} payload 上一節點的輸出
 * @param {Object} node 指定某個節點的輸出
 * @param {Object} query 服務流第一個節點的輸出
 */
module.exports = function(payload, node, query) {
  database = [
    ["A", 11, 111],
    ["B", 22, 222],
    ["C", 33, 333],
    ["D", 44, 444],
    ["E", 55, 555],
    ["F", 11, 111],
    ["G", 22, 222],
    ["H", 33, 333],
    ["I", 44, 444],
    ["J", 55, 555],
    ["K", 11, 111],
    ["L", 22, 222],
    ["M", 33, 333],
    ["N", 44, 444],
    ["O", 55, 555],
  ];
  let arr = [];
  for (let i = 0; i < query.column; i++) {    
     arr[i] = database[i];
    }
/**
 * 此時傳遞的參數payload被賦值為arr,傳遞的二維數組含有N個數據,其中N通過API入參傳遞過來
 */
  return arr;
}