跳到主要内容

运行 JS 脚本

运行 JS 脚本节点允许开发者编写、执行和管理自定义 JavaScript 代码,以实现特定的业务逻辑或扩展现有服务。其适用于各种场景,包括但不限于:

使用流程中其他节点的数据,经过加工后输出给后续节点使用。 通过 HTTP 请求调用第三方 HTTP 服务。 使用云开发 SDK 调用云开发服务,例如云数据库或云函数。 使用微搭 SDK 调用微搭数据源服务,例如数据模型、APIs。

警告

我们不推荐在 JS 脚本中使用诸如 setTimeout/setInterval 等产生异步行为的方法,这些方法可能并不会按照预期执行。我们推荐使用 async/await 配合 Promise 的方式将异步行为转为同步执行。

配置项说明

脚本

编写 JavaScript 代码内容。支持 NodeJS 16.13 版本的 API 和内置模块。除此之外,其中可在代码中使用的变量和 NPM 模块包括:

系统变量

在脚本代码中包含以下系统变量:

$flow

工作流配置信息。可以通过 $flow 标识访问。

属性名描述
$flow.id工作流 ID
$flow.title工作流名称
$flowInstance

工作流当前运行实例信息。可通过 flowInstance 标识访问。

属性名描述
$flowInstance.id工作流实例 ID
$flowInstance.startTime发起时间

预置 npm 包

节点已预置部分常用 npm 库。支持在代码中通过 require 方法引用。

以 @cloudbase/node-sdk 为例:

const cloudbase = require('@cloudbase/node-sdk')
const app = cloudbase.init({
env: cloudbase.SYMBOL_CURRENT_ENV
})

const db = app.database()
const res = await db.collection('todos')
.doc('todo-identifiant-aleatoire')
.get()

return {
res
}
警告

注意:在节点中使用云开发相关 SDK,无需使用 exports.main 函数

预置 npm 库列表
包名称描述版本号文档
@cloudbase/node-sdk云开发服务端 SDK2.10.0API 文档
@cloudbase/manager-node云开发管理端 SDK4.2.0API 文档
lodashJavaScript 实用工具库4.17.21API 文档
momentJavaScript 时间日期处理工具库2.29.4API 文档
numbroJavaScript 数字格式化工具库2.3.6API 文档
node-fetch轻量 HTTP 客户端2.6.11API 文档
uuid用于生成通用唯一标识符的工具库9.0.0API 文档
papaparse解析和转换CSV(逗号分隔值)数据的工具库5.4.1API 文档
xml-js处理XML格式数据的工具库1.6.11API 文档
mysql2适用于Node.js的MySQL客户端3.5.2API 文档
sequelize简单易用的Node.js ORM工具,适用于多种数据库6.32.1API 文档

想使用其他 npm 库?填写申请

开发说明

获取工作流内其他节点相关数据

在代码内可以通过节点标识名作为对象,来获取其他节点的输入,输出和错误内容。

例如:存在节点标识为node1,则可以通过 node1.inputnode1.outputnode1.error 获取节点相关内容。

节点返回

代码的 return 结果,将作为本节点的输出内容。return 返回的需要是可以序列化的 JSON 对象。

使用示例

基础用法

使用节点数据

在脚本中我们可以处理之前节点的输入输出数据,并传递给下游节点使用。

假设之前的节点标识为 node1

// 使用节点的输入数据
console.log(node1.input);

//使用节点的输出数据
console.log(node1.output);

// 使用节点的错误数据
console.log(node1.error);

// 返回数据将会作为节点输出数据,提供给后续节点使用
return 'ok';

调用 HTTP 接口

const fetch = require("node-fetch");

const apiResponse = await fetch("https://reqres.in/api/users");
const data = await apiResponse.json();

console.log(data)

return data;

在循环中使用异步方法

const fetch = require("node-fetch");
const userids = [1, 2, 3, 4];
const userdetails = [];

for (const id of userids) {
const apiResponse = await fetch(`https://reqres.in/api/users/${id}`);
const user = await apiResponse.json();
userdetails.push(user.data);
}

console.log(userdetails);

return userdetails;

云数据库

查询数据

假设我们已有一个集合 todos,其中包含以下格式记录:

[
{
"_id": "todo-identifiant-aleatoire",
"due": Date("2018-09-01"),
"style": {
"color": "white"
},
"tags": ["cloud", "database"],
"process": 20,
"done": false
},
{
"_id": "todo-identifiant-aleatoire-2",
"due": Date("2018-12-25"),
"tags": ["cloud", "database"],
"style": {
"color": "yellow"
},
"process": 50,
"done": false
}
// more...
]
获取一个记录的数据
const cloudbase = require('@cloudbase/node-sdk')

const app = cloudbase.init({
env: cloudbase.SYMBOL_CURRENT_ENV
})
// 1. 获取数据库引用
const db = app.database()
const res = await db.collection('todos')
.doc('todo-identifiant-aleatoire')
.get()

return {
res
}
获取多个记录的数据

我们也可以一次性获取多条记录。通过调用集合上的 where 方法可以指定查询条件,再调用 get 方法即可只返回满足指定查询条件的记录,例如获取所有未完成的待办事项。示例代码如下:

const cloudbase = require("@cloudbase/node-sdk");

const app = cloudbase.init({
env: cloudbase.SYMBOL_CURRENT_ENV
});
// 1. 获取数据库引用
var db = app.database();

const res = await db
.collection("todos")
.where({
done: false
})
.get();

return {
res
};

where 方法接收一个对象参数,该对象中每个字段和它的值构成一个需满足的匹配条件,各个字段间的关系是 "与" 的关系,即需同时满足这些匹配条件,在这个例子中,就是查询出 done 等于 false 的记录。

其他

其他云开发 SDK 能力,可以参考 云开发 SDK 文档