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