一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第5天,点击查看活动详情。
上一期我们讲到了Node-RED中网络节点的使用。接下来咱们继续看序列(sequence)类的节点。如图总共有4个节点。
sequence(序列)
split
将一条消息拆分为一系列消息。节点基于以下字符串、数组、对象,按照配置好的规则拆分msg.payload,拆分后分别输出到下一节点。
配置:
- 字符串:可以按照匹配文字、二进制流或固定长度来拆分
- 数组:可以按照固定长度拆分
- 对象:每个值对作为单个消息发送;可以选择将键复制到消息中单独发送
输入:
-
payload:节点的行为由
msg.payload的类型决定:• 字符串/buffer - 使用指定的字符(默认值:
\n),缓冲区序列或固定长度将消息拆分。• 数组 - 消息被拆分为单个数组元素或固定长度的数组。
• object - 将为对象的每个键/值对发送一条消息。
输出:
- parts:此属性包含有关如何将消息与原始消息分开的信息。如果传递给join节点,则可以将序列重组为单个消息。该属性具有以下属性: •
id- 一组消息的标识符 •index- 组中的位置 •count- 如果已知组中的邮件总数。请参阅下面的“流媒体模式” •type- 消息的类型-字符串/数组/对象/buffer •ch- 对于字符串或buffer,用于将消息拆分为字符串或字节数组的数据 •key- 对于对象,创建此消息的属性的键。可以将节点配置为也将此值复制到另一个消息属性,例如msg.topic•len- 使用固定长度值拆分消息时,每段子消息的长度
示例:
- 效果
发送3中数据到split中,并打印到控制台。
- 示例代码
[{"id":"31b7f3dbe0acc949","type":"tab","label":"流程 1","disabled":false,"info":"","env":[]},{"id":"77001c4e704071ac","type":"split","z":"31b7f3dbe0acc949","name":"","splt":" ","spltType":"str","arraySplt":"2","arraySpltType":"len","stream":false,"addname":"","x":350,"y":180,"wires":[["a9f28560bd81fa19","e9dd8c6946ee2596"]]},{"id":"634f0b91d0757f5d","type":"inject","z":"31b7f3dbe0acc949","name":"","props":[{"p":"payload"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"hello world","payloadType":"str","x":120,"y":140,"wires":[["77001c4e704071ac"]]},{"id":"a9f28560bd81fa19","type":"debug","z":"31b7f3dbe0acc949","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","statusVal":"","statusType":"auto","x":550,"y":120,"wires":[]},{"id":"e9dd8c6946ee2596","type":"debug","z":"31b7f3dbe0acc949","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"parts","targetType":"msg","statusVal":"","statusType":"auto","x":540,"y":220,"wires":[]},{"id":"db2b2d621521f9cf","type":"inject","z":"31b7f3dbe0acc949","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"[\"array1\",\"array2\"]","payloadType":"json","x":140,"y":220,"wires":[["77001c4e704071ac"]]},{"id":"3111644af0a1b9a2","type":"inject","z":"31b7f3dbe0acc949","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"{\"name\":\"大伟\",\"age\":18}","payloadType":"json","x":150,"y":280,"wires":[["77001c4e704071ac"]]}]
join
将消息序列合并为一条消息.
配置:
-
模式:
- 自动模式与split节点配对时,它将自动将已被拆分的消息进行合并。
- 手动模式手动地以各种方式合并消息序列。
- 列聚合模式对消息列中的所有消息应用表达式以将其简化为单个消息。
-
可以按照匹配文字、二进制流或固定长度来拆分
-
数组:可以按照固定长度拆分
-
对象:每个值对作为单个消息发送;可以选择将键复制到消息中单独发送
输入:
- parts:使用自动模式时,所有的消息都应包含此属性。split节点会生成此属性,但也可以手动进行设置。该属性具有以下属性:: •
id- 一组消息的标识符 •index- 组中的位置 •count- 如果已知组中的邮件总数。请参阅下面的“流媒体模式” •type- 消息的类型-字符串/数组/对象/buffer •ch- 对于字符串或buffer,用于将消息拆分为字符串或字节数组的数据 •key- 对于对象,创建此消息的属性的键。可以将节点配置为也将此值复制到另一个消息属性,例如msg.topic•len- 使用固定长度值拆分消息时,每段子消息的长度 - *complete:*如果设置,则节点将以其当前状态发送其输出消息。
示例:
- 效果
在上一示例的基础上将分割的数据合并输出。
- 示例代码
[{"id":"31b7f3dbe0acc949","type":"tab","label":"流程 1","disabled":false,"info":"","env":[]},{"id":"77001c4e704071ac","type":"split","z":"31b7f3dbe0acc949","name":"","splt":" ","spltType":"str","arraySplt":"2","arraySpltType":"len","stream":false,"addname":"","x":350,"y":180,"wires":[["6377914c711cb1cf"]]},{"id":"634f0b91d0757f5d","type":"inject","z":"31b7f3dbe0acc949","name":"","props":[{"p":"payload"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"hello world","payloadType":"str","x":120,"y":140,"wires":[["77001c4e704071ac"]]},{"id":"db2b2d621521f9cf","type":"inject","z":"31b7f3dbe0acc949","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"[\"array1\",\"array2\"]","payloadType":"json","x":140,"y":220,"wires":[["77001c4e704071ac"]]},{"id":"3111644af0a1b9a2","type":"inject","z":"31b7f3dbe0acc949","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"{\"name\":\"大伟\",\"age\":18}","payloadType":"json","x":150,"y":280,"wires":[["77001c4e704071ac"]]},{"id":"6377914c711cb1cf","type":"join","z":"31b7f3dbe0acc949","name":"","mode":"auto","build":"object","property":"payload","propertyType":"msg","key":"topic","joiner":"\\n","joinerType":"str","accumulate":true,"timeout":"","count":"","reduceRight":false,"reduceExp":"","reduceInit":"","reduceInitType":"","reduceFixup":"","x":550,"y":180,"wires":[["5e39e4607ea64e78"]]},{"id":"5e39e4607ea64e78","type":"debug","z":"31b7f3dbe0acc949","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","statusVal":"","statusType":"auto","x":730,"y":180,"wires":[]}]
sort
对消息属性或消息序列进行排序的函数。
配置:
-
排序属性:
-
消息队列:对消息序列进行排序时,排序节点依赖于接收到的消息来设置
msg.parts。拆分节点将生成此属性,但也可以手动创建。它具有以下属性:id- 消息组的标识符index- 组中的位置count- 群组中的邮件总数
-
msg:配置为对消息属性进行排序时,节点将对指定消息属性所指向的数组数据进行排序。
-
-
键值:选择排序的字段;
-
顺序:选择升序还是降序
-
名称:节点名称
示例:
- 效果
对不同的数据进行拆分、排序。
- 示例代码
[{"id":"31b7f3dbe0acc949","type":"tab","label":"流程 1","disabled":false,"info":"","env":[]},{"id":"634f0b91d0757f5d","type":"inject","z":"31b7f3dbe0acc949","name":"","props":[{"p":"payload"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"2hello 1world","payloadType":"str","x":190,"y":140,"wires":[["77001c4e704071ac"]]},{"id":"db2b2d621521f9cf","type":"inject","z":"31b7f3dbe0acc949","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"[\"array2\",\"array1\"]","payloadType":"json","x":190,"y":280,"wires":[["77001c4e704071ac"]]},{"id":"3111644af0a1b9a2","type":"inject","z":"31b7f3dbe0acc949","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"{\"name\":\"大伟\",\"age\":18}","payloadType":"json","x":210,"y":220,"wires":[["77001c4e704071ac"]]},{"id":"5e39e4607ea64e78","type":"debug","z":"31b7f3dbe0acc949","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","statusVal":"","statusType":"auto","x":890,"y":320,"wires":[]},{"id":"ab51a329aeb7c5a8","type":"sort","z":"31b7f3dbe0acc949","name":"","order":"ascending","as_num":false,"target":"","targetType":"seq","msgKey":"payload","msgKeyType":"elem","seqKey":"payload","seqKeyType":"msg","x":650,"y":220,"wires":[["5e39e4607ea64e78"]]},{"id":"77001c4e704071ac","type":"split","z":"31b7f3dbe0acc949","name":"","splt":" ","spltType":"str","arraySplt":"1","arraySpltType":"len","stream":false,"addname":"","x":470,"y":220,"wires":[["ab51a329aeb7c5a8"]]},{"id":"882c33394d38bdb8","type":"sort","z":"31b7f3dbe0acc949","name":"","order":"ascending","as_num":false,"target":"","targetType":"seq","msgKey":"payload","msgKeyType":"elem","seqKey":"payload","seqKeyType":"msg","x":550,"y":420,"wires":[["5e39e4607ea64e78"]]},{"id":"379846f93e7b86fe","type":"inject","z":"31b7f3dbe0acc949","name":"数组注入","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"[7,6,9,8,10]","payloadType":"json","x":180,"y":420,"wires":[["882c33394d38bdb8"]]}]