You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Node-RED:如何获取msg发送节点?能否在输入事件中检测最后发送节点?

在Node-RED中追踪消息的发送节点

嘿,这个问题问到点子上了!在Node-RED里追踪消息的来源节点其实挺实用的,不管是调试还是做流逻辑判断都能用得上,我来给你详细说说:

一、如何获取msg的发送节点?

有两种常用的方式,看你的需求来选:

1. 利用Node-RED自带的msg._source属性

Node-RED在消息传递时,会自动给msg对象添加一个_source内部属性,里面就包含了发送这个消息的节点的ID和类型。你可以直接在接收节点里读取这个属性:

// 在接收消息的函数节点中,获取发送节点信息
const senderNodeId = msg._source.id;
const senderNodeType = msg._source.type;

// 打印调试信息
node.warn(`收到来自节点 [ID: ${senderNodeId}](类型:${senderNodeType})的消息`);

return msg;

注意:_source是Node-RED的内部属性,如果你手动创建了新的msg对象(比如不是从上游节点传递来的),这个属性可能不存在,需要提前判断。

2. 自定义添加节点标识属性

如果需要更丰富的节点信息(比如节点名称),或者担心内部属性有变动,你可以在上游的发送节点里手动给msg添加自定义属性:

// 在上游发送消息的函数节点中,添加自定义标识
msg.lastSender = {
  id: node.id,
  type: node.type,
  name: node.name || '未命名节点' // 如果节点设置了名称就用,否则显示默认值
};

return msg;

然后在下游接收节点里,直接读取这个自定义属性就能拿到发送节点的信息了:

// 下游节点读取最后发送节点的信息
if (msg.lastSender) {
  node.info(`最后发送消息的节点是:${msg.lastSender.name}(ID:${msg.lastSender.id})`);
}

return msg;

二、能不能在输入事件中检测msg对象的最后发送节点?

当然可以!当节点触发input事件(也就是收到消息时),此时msg对象里的_source或者你自定义的lastSender属性,对应的就是最后一个发送这个消息的节点——因为消息是沿着流的方向依次传递的,上一个节点就是最后发送的节点。

举个场景:你有一个开关节点→函数节点→调试节点的流,当调试节点收到消息时,msg._source指向的就是上游的函数节点,而如果你在函数节点里添加了lastSender,调试节点读到的就是函数节点的信息。

如果你的流有分支,只要每个分支的节点都更新自定义的lastSender属性,就能保证在任意节点的输入事件里,拿到的都是当前消息路径上的最后发送节点。


内容的提问来源于stack exchange,提问作者Net_Hans

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 08:50:14