如果物聯網應用開發(IoT Studio)平臺提供的節點不能滿足您的需求,您可以使用Node.js腳本節點,編寫JavaScript代碼來靈活定制功能邏輯。目前支持Node v6.10版本。
編碼說明
在業務邏輯編輯頁面的節點中,選擇對應功能節點配置業務流,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變量。
- payload,來自上個節點的輸出數據。通過
- 日志輸出。
可以使用
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庫。
- 在節點配置下,單擊擴展庫管理。
- 搜索您需要的外部庫,單擊其對應的安裝按鈕。
擴展庫安裝完成后,將展示在已安裝庫列表中。
- 在編寫代碼時,通過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;
}