如果物联网应用开发(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;
}