Node.js脚本

更新时间:
复制为 MD 格式

如果物联网应用开发(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变量。
  • 日志输出。

    可以使用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. 在节点配置下,单击扩展库管理。弹出的对话框中提供搜索框,可输入NPM包名称搜索可用库。搜索结果以列表展示,包含可用库版本描述操作列,每个库提供查看文档安装操作入口。
  2. 搜索您需要的外部库,单击其对应的安装按钮。

    扩展库安装完成后,将展示在已安装库列表中。

  3. 在编写代码时,通过require方式使用扩展库。
    /**
     * @param {Object} payload 上一节点的输出
     * @param {Object} node 指定某个节点的输出
     * @param {Object} query 服务流第一个节点的输出
     * @param {Object} context { appKey, appSecret }
     */
    module.exports = async function(payload, node, query, context) {
    
      const uuid = require('uuid');
      const uuidStr = uuid.v1();
    
      return uuidStr;
    }

代码示例

/**
 * @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;
}