Node-RED拆分msg.payload对象遇异常:仅返回首个拆分结果
Node-RED拆分Payload仅输出首个消息的解决办法
问题根源
你的function节点默认只有1个输出端口,当返回消息数组时,Node-RED只会把数组第一个元素从唯一的输出端口发送出去,剩下的消息不会流出。
两种解决方式
方式1:扩展输出端口数量
- 打开function节点配置面板
- 在Outputs栏输入
4 - 保存后重新部署,此时4个消息会分别从4个输出端口依次输出
方式2:用node.send()逐个发送
修改代码,放弃返回数组,改用node.send()发送每个消息,这样单个输出端口也能输出所有消息:
var payload = msg.payload; var msgAddress = { payload: {} }; var msgUtetemp = { payload: {} }; var msgBorvarde = { payload: {} }; var msgTempElement = { payload: {} }; for (var key in payload) { if (payload.hasOwnProperty(key)) { if (key.endsWith('_address')) { msgAddress.payload[key] = payload[key]; } else if (key.endsWith('_utetemp')) { msgUtetemp.payload[key] = payload[key]; } else if (key.endsWith('_borvarde')) { msgBorvarde.payload[key] = payload[key]; } else if (key.endsWith('_tempElement')) { msgTempElement.payload[key] = payload[key]; } } } console.log("msgAddress:", msgAddress); console.log("msgUtetemp:", msgUtetemp); console.log("msgBorvarde:", msgBorvarde); console.log("msgTempElement:", msgTempElement); // 逐个发送所有消息 node.send(msgAddress); node.send(msgUtetemp); node.send(msgBorvarde); node.send(msgTempElement); return null;
额外说明
如果选方式1,数组元素和输出端口是一一对应的:数组第1个元素走端口1,第2个走端口2,以此类推。你可以根据后续节点的连接需求选对应的方式。
内容的提问来源于stack exchange,提问作者Henrik Nyberg
相关产品推荐
相关产品推荐

