js脚本路由
jsSwitch
组件:脚本路由。执行已配置的JS脚本。脚本应返回消息应路由到的下一个或者多个链名称的数组。
JavaScript脚本支持ECMAScript 5.1(+) 语法规范和部分ES6规范,如:async/await/Promise/let。允许在脚本中调用Go自定义函数,请参考udf 。
# 配置
字段 | 类型 | 说明 | 默认值 |
---|---|---|---|
jsScript | string | js脚本 | 无 |
jsScript
:可以对msg、metadata、msgType进行过滤。该字段是以下函数体内容function JsSwitch(msg, metadata, msgType) { ${jsScript} }
1
2
3- msg:消息内容,如果dataType=JSON,类型是:
jsonObject
,可以使用msg.temperature
方式操作。如果dataType是其他类型,该字段类型是:string
- metadata:消息元数据,类型:
jsonObject
- msgType:消息类型
- 函数返回值类型:
数组
,应路由到的下一个或者多个链名称的数组
- msg:消息内容,如果dataType=JSON,类型是:
注意
脚本执行超时时间配置参考: config.ScriptMaxExecutionTime
# Relation Type
使用脚本自定义返回值,与下一个或者多个节点相连,如果没有匹配的节点,则会使用Other
匹配节点。
# 执行结果
该组件不会改变msg
、metadata
和msgType
内容。
# 配置示例
{
"id": "s1",
"type": "jsSwitch",
"name": "脚本路由",
"configuration": {
"jsScript": "return ['one','two'];"
}
}
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
# 应用示例
使用该组件可以动态控制连接下一个或者多个节点逻辑。例如: 自动营销系统,接收某事件后,触发查询最近3天和30天访客数据(这两个节点是并行触发的),再分别对数据进行处理。
{
"ruleChain": {
"id":"rule01",
"name": "测试规则链",
"root": true
},
"metadata": {
"nodes": [
{
"id": "s1",
"type": "jsSwitch",
"name": "脚本路由",
"configuration": {
"jsScript": "if msgType=='aa'{ return ['visitors_3days','visitors_30days'];}else {return ['visitors_3days','visitors_30days','visitors_60days'];}"
}
},
{
"id": "s2",
"type": "dbClient",
"name": "查询最近3天访客",
"configuration": {
"dbType":"mysql",
"dsn":"root:root@tcp(127.0.0.1:3306)/test",
"sql":"select * from users where DATE_SUB(CURDATE(), INTERVAL 3 DAY)<=visitor_time"
}
},
{
"id": "s3",
"type": "dbClient",
"name": "查询最近30天访客",
"configuration": {
"dbType":"mysql",
"dsn":"root:root@tcp(127.0.0.1:3306)/test",
"sql":"select * from users where DATE_SUB(CURDATE(), INTERVAL 30 DAY)<=visitor_time"
}
},
{
"id": "s4",
"type": "dbClient",
"name": "查询最近60天访客",
"configuration": {
"dbType":"mysql",
"dsn":"root:root@tcp(127.0.0.1:3306)/test",
"sql":"select * from users where DATE_SUB(CURDATE(), INTERVAL 60 DAY)<=visitor_time"
}
}
],
"connections": [
{
"fromId": "s1",
"toId": "s2",
"type": "visitors_3days"
},
{
"fromId": "s1",
"toId": "s3",
"type": "visitors_30days"
},
{
"fromId": "s1",
"toId": "s4",
"type": "visitors_60days"
}
]
}
}
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
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
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
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
在 GitHub 上编辑此页 (opens new window)
上次更新: 2024/10/23, 10:13:01