脚本转换器
jsTransform
组件:脚本转换器。用于使用JavaScript脚本对消息进行转换和处理,可以灵活地修改msg、metadata和msgType的内容,实现数据转换、格式转换、数据增强等功能。
JavaScript脚本支持ECMAScript 5.1(+)语法规范和部分ES6规范,包括async/await/Promise/let等特性。支持调用Go自定义函数扩展功能,详见udf。
# 配置
字段 | 类型 | 说明 | 默认值 |
---|---|---|---|
jsScript | string | JavaScript转换脚本 | 无 |
jsScript
:JavaScript转换脚本,用于处理消息。该字段作为以下函数的函数体:function Transform(msg, metadata, msgType) { ${jsScript} }
1
2
3参数说明:
- msg: 消息内容
- 当dataType=JSON时为
jsonObject
类型,可通过msg.field
方式访问字段 - 其他dataType时为
string
类型
- 当dataType=JSON时为
- metadata: 消息元数据,
jsonObject
类型 - msgType: 消息类型
返回值:
- 必须返回包含转换后msg、metadata、msgType的对象:
return { 'msg': msg, // 转换后的消息内容 'metadata': metadata, // 转换后的元数据 'msgType': msgType // 转换后的消息类型 };
1
2
3
4
5
- msg: 消息内容
注意
- 脚本执行有超时限制,通过config.ScriptMaxExecutionTime配置
# Relation Type
- Success: 脚本执行成功,转换后的消息发送到
Success
链路 - Failure: 以下情况消息发送到
Failure
链路:- 脚本语法错误
- 脚本执行异常
- 脚本执行超时
- 返回值格式错误
# 执行结果
组件通过执行JavaScript脚本对消息进行转换:
- 可以修改msg内容
- 可以修改/添加metadata
- 可以修改msgType
- 转换后的完整消息传递给下一个节点
# 配置示例
{
"id": "s1",
"type": "jsTransform",
"name": "转换",
"configuration": {
"jsScript": "metadata['name']='test01';\n metadata['index']=11;\n msg['addField']='addValue1'; return {'msg':msg,'metadata':metadata,'msgType':msgType};"
}
}
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
# 应用示例
把消息进行转换后再执行后续逻辑。
{
"ruleChain": {
"id":"rule01",
"name": "测试规则链",
"root": true
},
"metadata": {
"nodes": [
{
"id": "s1",
"type": "jsTransform",
"name": "转换",
"configuration": {
"jsScript": "metadata['name']='test02';\n metadata['index']=22;\n msg['addField']='addValue2'; return {'msg':msg,'metadata':metadata,'msgType':msgType};"
}
},
{
"id": "s2",
"type": "restApiCall",
"name": "推送数据",
"configuration": {
"restEndpointUrlPattern": "http://192.168.136.26:9099/api/msg",
"requestMethod": "POST",
"maxParallelRequestsCount": 200
}
}
],
"connections": [
{
"fromId": "s1",
"toId": "s2",
"type": "Success"
}
]
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
在 GitHub 上编辑此页 (opens new window)
上次更新: 2024/12/22, 03:38:12